【问题标题】:Python Django templates for dummy用于假人的 Python Django 模板
【发布时间】:2015-03-30 18:05:24
【问题描述】:

首先,我很抱歉,因为这肯定是重复的。但是,我在 stackoverflow 上找不到与高级 Django 模板功能无关的问题。

我虔诚地关注了Django tutorial。我的项目结构如下:

poll_site
  ./db.sqlite3
  ./manage.py
  ./polls
    ./admin.py
    ./__init__.py
    migrations
    models.py
    __pycache__
    tests.py
    views.py
  ./poll_site
    ./__init__.py
    ./settings.py
    ./urls.py
    ./wsgi.py
  ./templates
    ./admin
      base_site.html

settings.py 的最后一行是

TEMPLATE_DIRS = (os.path.join(BASE_DIR, "templates"), )

(我试过TEMPLATE_DIRS = [os.path.join(BASE_DIR, "templates")]

templates/admin/base_site.html如下:

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Polls site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name">
    <a href="{% url 'admin:index' %}">{{site_header|default:_('Monkey') }}</a>
</h1>
{% endblock %}

{% block nav-global %}{% endblock %}

但是,当我访问我的网站时,我看到

我做错了什么?

【问题讨论】:

    标签: django python-3.x django-templates


    【解决方案1】:

    default 过滤器只有在值为空时才输出它的参数。在你的情况下,site_titlesite_header 不是空的,所以 default 不要做任何事情。

    {% load i18n %}
    
    {% block title %}{{ title }} | {% trans 'Polls site admin' %}{% endblock %}
    
    {% block branding %}
    <h1 id="site-name">
        <a href="{% url 'admin:index' %}">{% trans 'Monkey' %}</a>
    </h1>
    {% endblock %}
    

    顺便说一句,您不需要覆盖管理模板来更改标题/标题。阅读this section 的文档。

    【讨论】:

    • 如果我想要除标题之外的其他内容,我必须将{% extends "admin/base.html" %} 作为第一行。
    【解决方案2】:

    看起来您的模板从一开始就没有被渲染。

    模板中的翻译是使用 trans 和 blocktrans 标签完成的,而不是通过 _(通常指 ugettext 或其他兄弟)

    我的建议是:您可以在 settings.py 中print TEMPLATE_DIRS 来查看实际路径并确保它是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2013-08-31
      • 2012-05-09
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      相关资源
      最近更新 更多