Form.media没有被注入模板

时间:2014-01-27 12:36:29

标签: python django django-templates mezzanine

我写了一个简单的应用程序,它是夹层的自定义DateField小部件。 Afaik它是,这是一个简单的案例,除了过度扩展模板,它将在纯django或django-cms中相同(如果我错了,请随时纠正我)。 小部件:

class DatePickerInput(forms.DateInput):
def __init__(self, attrs = None, format = None):
    super(DatePickerInput, self).__init__(attrs, format)
    self.attrs["class"] = "datepicker"

class Media:
    css = { "all": ('css/ui-lightness/jquery-ui-1.10.3.custom.min.css',) }
    js = (
        "mezzanine/js/" + getattr(settings, "JQUERY_UI_FILENAME", "jquery-ui-1.9.1.custom.min.js"),
        "js/datepicker_setup.js",)

我过度扩展base.html模板以插入form.media:

{% overextends "base.html" %}

{% load pages_tags mezzanine_tags i18n future staticfiles %}

{% block extra_head %}{{ block.super }}
{{ form.media }}
{% endblock %}

现在,我为我的模型类创建一个表单。 这是班级:

class PlayerProfile(models.Model):
    user = models.OneToOneField("auth.User")

    # Can be later changed to use a setting variable instead of a fixed date
    date_of_birth = models.DateField(default=date(1990, 1, 1))

这是模型形式:

from DateWidgets.widgets import DatePickerInput
from PlayerProfiles.models import PlayerProfile

class EditPlayerProfileForm(Html5Mixin, forms.ModelForm):
    class Meta:
        model = PlayerProfile
        fields = ("date_of_birth", )
        widgets = { 'date_of_birth': DatePickerInput }

    def __init__(self, *args, **kwargs):
        super(EditPlayerProfileForm, self).__init__(*args, **kwargs)

以下是观点:

@login_required
def profile_update(request, template="accounts/account_profile_update.html"):
    """
    Profile update form.
    """
    pform = forms.EditPlayerProfileForm
    player_form = pform(request.POST or None, request.FILES or None, instance=request.user.playerprofile)

    context = {"pform": player_form, "title": _("Update Profile"), "profile_user": request.user}
    return render(request, template, context)

这是模板:

{% overextends "accounts/account_profile_update.html" %}
{% load i18n mezzanine_tags %}

{% block main %}
<fieldset>
    <legend>{{ title }}</legend>
    <form method="post"{% if pform.is_multipart %} enctype="multipart/form-data"{% endif %}>
    {% fields_for pform %}
    <div class="form-actions">
        <input class="btn btn-primary btn-large" type="submit" value="{{ title }}">
    </div>
    </form>
</fieldset>
{% endblock %}

现在,如果我在浏览器中查看表单,那么自定义小部件就在那里(我可以告诉因为输入的html标签有我的自定义类属性值)但是它没有注入表单媒体,它已经丢失了。知道这里发生了什么吗?提前致谢!干杯: - )

2 个答案:

答案 0 :(得分:3)

form在模板中不可用,因为您调用了表单变量pform

尝试{{ pform.media }}

答案 1 :(得分:0)

我在不同条件下被谷歌搜索到,并发现了在其他条件下可能出现的另一个错误(我的案例在Django 2.1中扩展了change_form.html):我不得不使用extrahead而不是extra_head

{% block extrahead %}{{ block.super }}
{{ form.media }}
{% endblock %}