Django命名的url,通用视图?

Posted

技术标签:

【中文标题】Django命名的url,通用视图?【英文标题】:Django named urls, generic views? 【发布时间】:2010-10-13 07:46:24 【问题描述】:

所以,这是我的 urls.py 之一

urlpatterns = patterns('items.views',
    url(r'^(?P<item_id>[\d+])/$', 'view_listing', name="item_view"),
)

在我的模板中,我可以这样做:&lt;a href="% url item_view 1 %"&gt;here&lt;/a&gt;,我会得到一个指向正确页面的链接。一切都很好!

但是,这里还有一个

urlpatterns = patterns('django.views.generic.list_detail',
    (r'^(?P<slug>[\w-]+)/$', 'object_detail', dict(page_info, slug_field='slug'), "page_view"),
)

但是在我的模板中,如果我尝试这个:&lt;a href="% url page_view slug='TermsAndConditions' %"&gt;Terms and Conditions&lt;/a&gt; 或这个&lt;a href="% url page_view 'TermsAndConditions' %"&gt;Terms and Conditions&lt;/a&gt; 它会出现这个错误:

TemplateSyntaxError at /

Could not parse the remainder: ''TermsAndConditions '' from ''TermsAndConditions ''

有谁知道是否可以使用带有通用视图和url 模板标签的命名网址?还是让它与通用视图一起工作的正确方法?

谢谢。

【问题讨论】:

【参考方案1】:

解决办法是

<a href='% url page_view slug="TermsAndConditions" %'>Terms and Conditions</a>

【讨论】:

谁能想到像更改引号类型这样简单的解决方案就可以解决问题。我什至不再在该网站上工作了,但无论如何,我做了一个快速测试,它奏效了。谢谢。【参考方案2】:

Django 中的模板系统只支持双引号,这就解释了你在使用单引号时遇到的语法错误。你需要这样做

% url page_view slug="TermsAndConditions" %

如果你省略了引号,Django 你指的是一个名为TermsAndConditions变量

【讨论】:

我以前也试过这个,但它也不起作用。我收到此错误:TemplateSyntaxError at / Caught an exception while rendering: Reverse for 'listitstolen.page_view' with arguments '()' and keyword arguments ''slug': u'TermsAndConditions'' not found. 奇怪。这对我有用——我将 page_view 的 URLconf 放在一个空项目中,并在 shell 中尝试了模板代码——反之亦然。尝试在 URLconf 中使用 url() (尽管我猜它没有区别......)并尝试使用位置版本: % url page_view "TermsAndConditions" % 还是不行。不知道它是如何为您而不是我工作的,但这不会是编程中第一次出现这种情况。我想知道 out 实现之间有什么不同。你能够使用通用详细视图使其工作吗?这是我的代码dpaste.com/hold/15428【参考方案3】:

不要在字符串“TermsAndConditions”两边加上引号:

% url page_view slug=TermsAndConditions %

【讨论】:

这给了我一个不同的错误。 TemplateSyntaxError at / Caught an exception while rendering: Reverse for 'listitstolen.page_view' with arguments '()' and keyword arguments ''slug': ''' not found. 抱歉,请使用双引号。我认为这是您尝试使用的变量。 我以前也试过这个,但它也不起作用。我收到此错误:TemplateSyntaxError at / Caught an exception while rendering: Reverse for 'listitstolen.page_view' with arguments '()' and keyword arguments ''slug': u'TermsAndConditions'' not found.

以上是关于Django命名的url,通用视图?的主要内容,如果未能解决你的问题,请参考以下文章

Django - 基于类的通用视图 - “没有要重定向到的 URL”

urls.py 中的 Django 时区逻辑和通用视图引发错误,但它是视图、字段还是我?

使用通用登录视图时出现“名称'django'未定义”错误?

带有更新的 slug 的 Django 通用视图 UpdateView 重定向 URL

对于 Django 模板 %url% 标签,我如何从通用视图上下文中找到所有 URL 参数,而不仅仅是最后一个?

与 Django 通用视图中的 pk 不同的 url 路径