2011-08-11 55 views
3

让我们想象一下这个模型:Django的 - 管理自定义字段的显示和行为

class ScribPart(models.Model): 
    name = models.CharField(max_length=50, unique=True) 
    text = models.TextField() 

我想一个特定的类附着在现场text,并调用特定的js文件。因此,管理页面将如下所示:

... 
<script type="text/javascript" src="/static/js/mymarkup.js"></script> 
... 
<textarea id="id_text" name="text" class="mymarkup"></textarea> 
... 

我该如何使用小部件和/或自定义管理表单来做到这一点?

回答

5

中插入一个管理页面<script>做最简单的事情是:

class ScribPartAdmin(model.ModelAdmin): 
    ... 
    your normal stuff... 
    ... 

    class Media: 
     js = ('/path/to/your/file.js',) 

ModelAdmin media definitions documentation

我们的class属性添加到textarea我认为这样做是这样的最简单的方法:

from django import forms 

class ScribPartAdmin(model.ModelAdmin): 
    ... 
    your normal stuff... 
    ... 

    class Meta: 
     widgets = {'text': forms.Textarea(attrs={'class': 'mymarkup'})} 

Overriding the default widgets documentation

我要补充一点,这种做法是去用于一次性使用。如果你想重复使用你的领域或JS多次,有更好的方法来做到这一点(该领域的自定义小部件,如果JS是专门与该领域相关的指定JS文件,扩展模板包括在许多地方的JS文件) 。

+0

这似乎是我期待的答案。我用我的模型注册了ScribPartAdmin,但是这个类不在这里,也不是JavaScript。 –

+0

我很难在没有看到代码的情况下帮助你。一些注意事项:脚本标记只会出现在编辑视图中,而不是列表视图中。检查HTML输出以确保没有脚本标记,也许脚本标记存在但是路径错误,因此JS文件未加载。 – Etienne

1

你必须创建一个模板,把它放在模板/管理/ change_form_scribpart.html与此内容:

{% extends "admin/change_form.html" %} 
{% load i18n %} 

{% block content %} 
    <script type="text/javascript" src="/static/js/mymarkup.js"></script> 
    {{ block.super }} 
{% endblock %} 

同时,不要忘了在ScribPart的ModelAdmin激活这个新的管理模板:

class ScribPartAdmin(admin.ModelAdmin): 
    ordering = ... 
    fieldsets = ... 
    change_form_template = "admin/change_form_scribpart.html" 
+0

如果只是为了javascript,Etienne的解决方案似乎更简单。然而,这很有趣,如果我这样做,我必须指定'change_form_template',如果我把模板放入好的目录('/ templates/admin/my_app/scribpart/change_form.html')? –

+0

是的,那么你设置change_form_template =“admin/my_app/scribpart/change_form.html” –

0

您可以使用JSON包发送您的表单并获取(检查),此代码

results = ScribPart.all() 
    for r in results : 

     if r.test == id_text: 
      self.response.out.write("<script type='text/javascript' src='/static/js/"+r.name+"mymarkup.js'></script>") 
相关问题