【问题标题】:How to create correct path in Django template如何在 Django 模板中创建正确的路径
【发布时间】:2016-12-10 18:36:54
【问题描述】:

我正在尝试在模板中创建指向一些子页面的菜单:

<a href="/">HOME</a> <a href="/about/">O NAS</a> <a href="/rules/">REGULAMIN</a> <a href="/faq/">FAQ</a> <a href="/docs/">DOKUMENTY</A> <a href="/contact/">KONTAKT</a>

而且它只有在我把它放到主文件夹时才有效,所以网址是http://example.org/about/

当我将它放入某个子文件夹时,它会出错:

http://example.org/subfolder/about/ 有效,但菜单中的链接仍然指向http://example.org/about/,这是正确的行为。

相对路径不起作用,因为它添加而不是替换 URL 的最后一部分,例如:http://example.org/subfolder/about/rules/

如果我知道它将放置什么 url,我可以将它硬编码到模板中,但我确信它可以在两个具有不同“子文件夹”的地方工作,我想让它在任何环境中工作。

我正在尝试寻找解决方案,但它引导我到 TEMPLATE_CONTEXT_PROCESSORS,这对我不起作用,我不确定这是否正是我想要得到的,所以我不深入了解。

【问题讨论】:

    标签: django templates


    【解决方案1】:

    Name your URL's.

    url(r'^about', views.about, name="about")
    

    然后使用URL template tag 为每个名称生成适当的 URL。

    {% url 'about' %}
    

    【讨论】:

    • NoReverseMatch at / Reverse for 'about' 没有找到参数 '()' 和关键字参数 '{}'。尝试了 0 个模式:[]
    【解决方案2】:

    解决方案是添加

    from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
    
    TEMPLATE_CONTEXT_PROCESSORS = TCP + (
        'django.core.context_processors.request',
    )
    

    进入settings.py

    这是在这里找到的:https://stackoverflow.com/a/9233283/354420

    在模板中,您可以使用views.aboutname(如果已定义)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2021-10-01
      • 2015-03-22
      相关资源
      最近更新 更多