在夹层Django项目上安装新主题后丢失表单标签

时间:2017-07-16 14:06:26

标签: python django mezzanine

我在临时主机上创建了一个夹层项目。我发现一个主题非常适合我的项目看起来不错。所以我将主题下载到我的项目并更改了settings.py中的主题名称。我还通过取消注释来使用夹层公共帐户应用程序。

以下是settings.py

中的代码
INSTALLED_APPS = (
"flat",
"django.contrib.admin",
"django.contrib.auth",
...
"mezzanine.accounts",
...
)

这很有效。主页看起来不错。但是当我测试帐户注册时,遗憾的是它丢失了所有表单标签。我认为这是第一次出现静态文件问题,所以我修改了html类标签并将夹层最新的css文件更新到平板应用程序。经过多次尝试,在问题上花了很多时间,它没有改变任何东西。

这是theme flat

的链接

enter image description here

所以我开始关注我在模板{% fields_for form %}

上找到的accounts/account_form.html
{% extends "base.html" %}
{% load i18n mezzanine_tags %}

{% block meta_title %}{{ title }}{% endblock %}
{% block title %}{{ title }}{% endblock %}
{% block body_id %}account{% endblock %}

{% block breadcrumb_menu %}
{{ block.super }}
<li>{{ title }}</li>
{% endblock %}

{% block main %}

{% errors_for form %}

<form method="post"{% if form.is_multipart %} 
enctype="multipart/form-data"{% endif %} role="form" class="center">
    <fieldset class="registration-form">

    {% fields_for form %}

    <div class="form-group">
                    <button type="submit" class="btn btn-success btn-
md btn-block">{{ title }}</button>
                    {% block account_form_actions %}

        {% endblock %}
                </div>
   </fieldset>

最后,我在../lib/python3.5/site-packages/mezza nine/core/templates/includes/form_fields.html找到了来源。这可能是{% if field.label %}<label class="control-label" for="{{ field.auto_id }}">{{ field.label }}</label>{% endif %}

的问题
{% load i18n %}
{% load mezzanine_tags %}

{% nevercache %}
<input type="hidden" name="referrer" value="{{ 
request.META.HTTP_REFERER }}">
{% csrf_token %}
{% endnevercache %}

{% for field in form_for_fields %}
{% if field.is_hidden %}
{{ field }}
{% else %}
<div class="form-group input_{{ field.id_for_label }} {{ 
field.field.type }}
    {% if field.errors %} has-error{% endif %}">
    {% if field.label %}<label class="control-label" for="{{ 
field.auto_id }}">{{ field.label }}</label>{% endif %}
    {{ field }}
    {% if field.errors %}
    <p class="help-block">
        {% for e in field.errors %}
        {% if not forloop.first %} / {% endif %}{{ e }}
        {% endfor %}
    </p>
    {% elif field.help_text %}
    <p class="help-block">{{ field.help_text }}</p>
    {% elif field.field.required %}
    <p class="help-block">{% trans "required" %}</p>
    {% endif %}
</div>
{% endif %}
{% endfor %}

{% endblock %}

但是在我要破解它之前,我运行命令python manage.py collectstaticpython manage.py collecttemplates --noinput来将夹层默认静态文件和模板文件收集到平面应用程序中。它返回了带有正确表单标签的默认夹层主题。

enter image description here enter image description here

|-- __init__.py
|-- deploy
|   |-- crontab.template
|   |-- gunicorn.conf.py.template
|   |-- local_settings.py.template
|   |-- nginx.conf.template
|   `-- supervisor.conf.template
|-- project
|   |-- __init__.py
|   |-- __pycache__
|   |-- dev.db
|   |-- local_settings.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- fabfile.py
|-- flat
|   |-- __init__.py
|   |-- admin.py
|   |-- models.py
|   |-- static
|   |-- templates
|   |-- tests.py
|   `-- views.py
|-- gunicorn.conf.py
|-- manage.py
|-- requirements.txt
...
...

以下是settings.py

中的模板设置
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [
            os.path.join(PROJECT_ROOT, "flat/templates"),
         ...

现在真的让我很困惑。我不知道从哪里开始。所以想请专家来帮助我。提前致谢。我非常感谢那些可以帮助我或给我一些解决方案的人。谢谢。

1 个答案:

答案 0 :(得分:0)

我意识到这可能有点晚了-但是我对此主题有完全相同的问题,以下是解决方法:

假设您已经下载了主题并将其作为应用程序复制到您的项目中,或者运行了collecttemplates,那么Mezzanine的fields_for模板标签将使用templates/includes/form_fields.html处的模板。就我而言,我将模板作为应用程序运行,因此它位于/flat/templates/includes/form_fields.html

模板的创建者已删除包含标签的行: {% if field.label %}<label class="control-label" for="{{ field.auto_id }}">{{ field.label }}</label>{% endif %}

因此,如果您将该行添加回去,则会得到标签。