如何在 Django 模板中创建正确的路径

Posted

技术标签:

【中文标题】如何在 Django 模板中创建正确的路径【英文标题】:How to create correct path in Django template 【发布时间】: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,这对我不起作用,我不确定这是否正是我想要得到的,所以我不深入了解。

【问题讨论】:

【参考方案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://***.com/a/9233283/354420

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

【讨论】:

以上是关于如何在 Django 模板中创建正确的路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 模板的引导程序中创建可折叠卡片?

如何从用户在 django 基本模板中创建的所有帖子中获取模型字段值的总和?

如何使用 CBV 在我的所有 Django 模板中创建侧边栏?

如何在django创建模板中创建对象时自动插入当前用户?

我应该如何在 Angular ui-router 中创建 templateUrl 属性的路径?

如何在 django 中创建带参数的链接