使用带有特殊字符的 Django 的 url 模板标签

Posted

技术标签:

【中文标题】使用带有特殊字符的 Django 的 url 模板标签【英文标题】:Use Django's url template tag with special characters 【发布时间】:2011-05-13 14:12:56 【问题描述】:

我正在使用 django 的 url 标签从一个视图移动到另一个视图:

<a href = % url wiki_view item %>Read more here</a>

对于大多数“项目”来说,这非常有效。但我有一个带有 / 字符的“项目”:Sci-Fi/Fantasy。在这种情况下,我得到一个错误

渲染时捕获 NoReverseMatch:“wiki_view”的反向参数“(u'Sci-fi/Fantasy',)”和关键字参数“”未找到。

我的 urls.py 是这样定义的:

url(r'^wiki/page/(?P<page_title>[^/]*)/$', views.wiki_view, name = 'wiki_view'),

有没有办法像这样使用“/”字符?

【问题讨论】:

【参考方案1】:

按照 Ignacio 的建议使用 urlencode 过滤器,但是您仍然会遇到问题,因为默认情况下,过滤器假定 / 不理会。您可以通过以下方式使用过滤器来解决此问题(如果您当前使用的是开发版本):

item|urlencode:""

这在Django docs中有解释。

【讨论】:

嗯。好的。我在 1.3.0 alpha。我有点犹豫要不要跳到开发版本,因为这可能在生产中需要。我会给你答案,但如果你有其他建议,我们将不胜感激。 你可以create your own filter,只是复制code in the dev version【参考方案2】:

首先通过urlencode 传递参数。

【讨论】:

不错。但是如何将它与 url 模板标签结合起来呢?我试过:在这里阅读更多,但我得到了同样的错误 @Ed。看看这个code.djangoproject.com/ticket/15718你需要做两次 urlencode【参考方案3】:

您应该在 URL 中使用的任何内容上使用 Djanog 的 slugify。它用 URL 友好的字符和人类可读的替代字符替换类似的字符。

from django.template.defaultfilters import slugify

【讨论】:

谢谢。我会记住这一点。但是,在这种情况下,slugify 完全删除了正斜杠。构建以下页面时,标题为 Sci-fiFantasy 是的,也许 slugify 最好在一些先见之明的情况下使用。因此,@Ignacio 的答案是一个更好的即时解决方案。

以上是关于使用带有特殊字符的 Django 的 url 模板标签的主要内容,如果未能解决你的问题,请参考以下文章

django模板

django 模板关闭特殊字符转化

带有密码更改视图的模板中的 Django url 错误

在视图而不是模板中生成带有 Django 静态 url 的图像标签

如何在 Django 模板中使用带有外键对象的 get_absolute_url()

带有可变 django 模板的动态 URL