3

让我们想象一下这个模型:

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>
...

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

4

3 回答 3

5

<script>要在管理页面中插入一个最简单的方法是:

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

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

ModelAdmin 媒体定义文档

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

from django import forms

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

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

覆盖默认小部件文档

我应该补充一点,这种方法适合一次性使用。如果您想多次重用您的字段或 JS,有更好的方法来做到这一点(字段的自定义小部件,如果 JS 仅与该字段相关,则指定 JS 文件,扩展模板以在许多地方包含 JS 文件) .

于 2011-08-11T18:23:08.893 回答
1

你必须创建一个模板,把它放在 templates/admin/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"
于 2011-08-11T14:43:24.100 回答
0

您可以使用 json pack 发送表单并使用此代码获取(检查)

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>")
于 2011-08-11T14:45:03.507 回答