请告诉我正确的方式来使用,并且是指一个slugfield在Django 1.3
请告诉我正确的方式来使用,并且是指一个slugfield在Django 1.3请告诉我正确的方式来使用,并且是指一个slugfield在Django 1.3
例如下面的代码应通过蛞蝓链接到一个通用视图但是会收到NoReverseMatch错误。
Caught NoReverseMatch while rendering: Reverse for 'single_post' with arguments '('', u'post-2')' and keyword arguments '{}' not found.
从我的理解这句话的错误在于然而模板是一个新手,并尝试过在{%URL single_post金属块= post.slug%}许多不同的变化,这可能并非如此。
有人可以请解释为什么会发生这种情况,以便我可以了解问题所在以及如何解决。
伊夫试图{%URL single_post蛞蝓= post.slug%},{%URL single_post蛞蝓%} {%URL single_post蛞蝓= post.slug%}和许多其他变化
所有帮助感激
模型
slug = models.SlugField(max_length=120, unique=True)
网址
url(r'^post/(?P<slug>[a-z-]+)/$', list_detail.object_detail,
{'queryset': Post.objects.all(), 'template_object_name': 'post', 'slug_field': 'slug'}, name="single_post"),
模板
{% url single_post slug post.slug %}
您的正则表达式不允许使用数字值。尝试:
(?P<slug>[\w-]+)
在模板中,假设post
是你的模型的实例:
{% url single_post post.slug %}
您的网址的正则表达式应该如下所示:
url(r'^post/(?P<slug>[\w-]+)/$', ...
为了检验上述正则表达式,尝试直接在浏览器中使用各种有效的slu access访问一些帖子,看看它们是否有效。一旦完成,开始测试url名称。
甲蛞蝓值可以包含任何a-z
,A-Z
,0-9
,_
和-
。前3个由特殊字符w
表示,由于-
本身是一个特殊字符,因此我们需要使用反斜杠\
来表示它们。所以正确的表达式变成
url(r'^post/(?P<slug>[\w\-]+)/$', ...
至少这就是我的情况。
在Django的1.5蛞蝓验证程序使用此正则表达式:
slug_re = re.compile(r'^[-a-zA-Z0-9_]+$')
见https://github.com/django/django/blob/stable/1.5.x/django/core/validators.py#L106
您可以在URL中使用正则表达式。潘岳:
url(r'^post/(?P<slug>[-a-zA-Z0-9_]+)/$', ...
在早期版本中它是[-\w]+
,但我想在Python3 \ W匹配非ASCII字符像变音符号。
我试过你的建议,但是没有运气。正则表达式绝对是问题,还是可能来自另一个领域。依你的意见?谢谢 – Stu 2011-04-19 14:43:18
嗯。正则表达式似乎是这里的罪魁祸首。 [a-z - ] +不匹配:post-2。 [ - \ w] +在我的Django应用程序中执行。 \ w根据Python正则表达式语法参考匹配[a-zA-Z0-9_]:http://docs.python.org/library/re.html#re-syntax – Brandon 2011-04-19 14:55:10
非常感谢您的帮助。你是对的。 – Stu 2011-04-19 21:35:50