【问题标题】:Retrieving the URL in Django template language以 Django 模板语言检索 URL
【发布时间】:2010-06-16 16:09:07
【问题描述】:

在 Django 模板中,我如何引用 URL。我想在静态页面中使用它,以避免有指向当前页面的实时链接。有没有办法使用 Django 模板语言来做到这一点,还是我必须使用 JavaScript 来做到这一点?

我想做类似的事情

{% if current_url == "/about/" %}
About
{% else %}
<a href='/about/'>About</a>
{% endif %}

我将它用于一个简单的博客,因此没有为这些页面编写视图。

【问题讨论】:

    标签: javascript django


    【解决方案1】:

    我认为您提到的“静态页面”是指通用视图。在内部,它们使用 RequestContext,因此您可以访问当前 HttpRequest 的 request 对象。因此,您可以使用request.path 访问当前 URL。

    {% if request.path == '/about/' %}
    ...
    {% endif %}
    

    请注意,此 if 语法仅适用于 Django 1.2+ - 如果您使用的是旧版本,则必须这样做:

    {% ifequal request.path '/about/' %}
    ...
    {% endifequal %}
    

    【讨论】:

    • 我试过了,但似乎没有用。 Django 版本是 1.2.1。
    【解决方案2】:

    您可以用request.path 代替上面示例中的current_url(假设您已经使用了django.core.context_processors.request)。它必须是== 而不是= :o)

    【讨论】:

    • 我一直在尝试将 django.core.context_processors.request 添加到设置文件(以及一系列相关设置),但我仍然无法正常工作。我曾(错误地)假设使用 Django 会非常简单。
    • 这很简单。您可以将您的 settings.py 粘贴到上面的问题中(或者至少是 TEMPLATE_CONTEXT_PROCESSORS 元组),以便我们看看吗?
    • 当我第一次问这个问题时,我的设置文件中没有任何 TEMPLATE_CONTEXT_PROCESSORS。我添加了:TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth"、"django.core.context_processors.request"、"django.core.context_processors.debug"、"django.core.context_processors.i18n"、" django.core.context_processors.media", "django.contrib.messages.context_processors.messages")
    【解决方案3】:

    我认为你可以通过简单的模板继承来实现这一点:

    # base.html
    {% block contactlink %}<a href='/contact/'>Contact</a>{% endblock %}
    {% block aboutlink %}<a href='/about/'>About</a>{% endblock %}
      ...
    
    # about.html
    {% block aboutlink %}About{% endblock %}
    
    # contact.html
    {% block contactlink %}Contact{% endblock %}
    

    当然,这仅在您为每个页面都有单独的模板时才有效,但我假设您这样做了,因为您说页面是静态的。了解更多关于您正在使用的视图(假设通用视图 direct_to_template 或类似视图)和您的 urls.py 会有所帮助。

    【讨论】:

    • SO 语法高亮显然不喜欢与 python cmets 混合的 django 模板语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2010-12-04
    • 2011-10-24
    • 1970-01-01
    • 2015-06-19
    • 2019-08-01
    • 2012-07-11
    相关资源
    最近更新 更多