django - 如何在可重复使用的应用程序中将 namespace url与Django一起使用

标签 django django-urls

我有一个django应用程序,一个论坛应用程序,它带有模板。在这些模板中,有指向应用程序各个部分的URL。例如thread_list模板具有到每个线程的链接,如下所示:

{% for thread in threads %}
    <a href="{% url forum_thread thread %}">{{thread.title}}</a>
{% endfor %}

问题是,我真的不喜欢将我的网址称为“forum_thread”。我更喜欢仅使用“线程”并使用django的 namespace 功能。 “forum_thread”可以在项目中的其他地方使用(命名空间冲突)。因此它看起来像这样:
{% for thread in threads %}
    <a href="{% url forum:thread thread %}">{{thread.title}}</a>
{% endfor %}

但这不像是正确的方法。这些文档在这里还不清楚。

我希望该应用程序可重用并且易于配置。但是我也想使用最好的标准。我不想让用户指定自己的 namespace 名称,然后让他们编辑每个模板中的每个url。

我该如何在此应用程序中添加网址?

最佳答案

据我所知,您应该能够使用您所描述的{%url forum:thread thread%}。命名空间似乎总是用两个变量定义的,即命名空间和app_name。

如果您随后在urls.py中执行以下操作:

url(r'^/forum/', include('forum.urls', namespace='forum', app_name='forum')),
url(r'^/foo/', include('forum.urls', namespace='foo', app_name='forum')),
url(r'^/bar/', include('forum.urls', namespace='bar', app_name='forum')),

以我的理解,这定义了应用程序“forum”,“foo”,“bar”和默认值(具有命名空间== app_name)的3个实例。

当您反转forum:thread时,它将使用当前上下文来确定要使用的上下文-如果您位于 namespace 'foo'中,它将使用该上下文,否则将使用默认上下文。

如果有人能够阐明Django如何确定“当前” namespace /应用是什么,那将非常有帮助。我目前将其归类为“黑魔法”。

对 namespace 和app_name之间的实际区别进行一些澄清也将有所帮助-我可能完全颠倒了这一点。当前的文档非常含糊。

注意:我可以处理初始请求,但是我目前无法处理AJAX请求-由于某些原因,这些请求始终使用默认实例。

关于django - 如何在可重复使用的应用程序中将 namespace url与Django一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3155733/

相关文章:

django - 将 Sphinx 文档与 django 集成

python - 如何将 Django/Celery 定期任务和常规任务放在单独的文件中?

python - django 找不到 View ...找不到页面错误

django - Django 2.0 url()到path()

django - Django 应用程序中无法访问 Robots.txt

python - 具有 ModelChoiceField 和模拟数据的 UnitTest ModelForm

python - Django - 登录后,将用户重定向到他的自定义页面 --> mysite.com/username

python - 使用views.py从urls.py捕获变量时遇到问题

python - 正则表达式 URL 帮助 : Word or Phrase

python - 在 Django 中使用额外的尾部斜杠重定向 url 的最佳方法?