使用带有特殊字符的 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 静态 url 的图像标签