接受对象或字典的 Django url

Posted

技术标签:

【中文标题】接受对象或字典的 Django url【英文标题】:Django urls accepting an object or Dictionary 【发布时间】:2013-06-16 23:56:33 【问题描述】:

由于我是 django 新手,我不了解高级 django url 概念。 所以我想知道在 django urls 中是否有以下可能。

我的第一个问题是,

在我的 django 模板中,我调用了这个 url,

<a href="/product/mycart/val.price">

我在上面的 href 中使用了下面的 url

url(r'^mycart/(?P<val.price>\d+)/$', 'cartList')

但它显示以下错误,

error at /product/list/

bad character in group name

我的第二个问题是在我的 django 模板中,我有以下内容

val.price=some value

val.id=some value

val.hieght=some value

现在我在 url 下面调用它

<a class="add_to_cart" href="/product/mycart/val" title="Product Cart">Add To Cart</a>

我在上面的href中使用了下面的url

url(r'^mycart/(?P<val>\d+)/$', 'cartList')

但它显示以下错误

Page not found (404)

请帮我解决这些问题.....

【问题讨论】:

【参考方案1】:

通过将val.price 放入 URL 模式本身,您到底想做什么?这是没有意义的。命名组中的内容是传递给视图的参数。您需要使用有效的 Python 变量标识符:您不能在 Python 中将函数定义为 def cart_list(request, val.price),因此您不能在 URL conf 中使用它。为什么不能只使用price

你的第二个问题也没有意义。确切地说,您放入浏览器以发送 val 对象的 URL 是什么? urlpattern 必须解析为实际的 URL。

不可能知道你实际上想要做什么,但也许你想传递对象的数据库 ID?然后您的接收视图可以通过其 ID 在数据库中查找对象,提取价格,并将其添加到购物车。

【讨论】:

嗨 daniel 。请注意,我是从 django 模板调用我的 url。所以我用来从模板传递参数的变量只能在 url 中接受。所以我必须在 url 和 django 模板中使用相同的变量。函数定义中发生的事情对我来说不是问题。请再看一遍我的问题...... 不,您需要从逻辑上考虑这一点。您确实需要使用“URL 和 Django 模板中的相同变量”。你当然不知道。您需要在 URL 和它调用的视图中使用相同的名称。但在模板中,您只需按照您的方式执行 &lt;a href="/product/mycart/val.price"&gt;,您的 URLconf 为 r'^mycart/(?P&lt;price&gt;\d+)/$'【参考方案2】:

第一个问题

你最好命名你的网址:

url(r'^mycart/(?P<val.price>\d+)/$', 'cartList', name="cart_list)

然后在你的模板中你可以使用

<a href="% url cart_list val.price %">

第二个问题

这两个 url 在我看来都是一样的,我的猜测是 django 看不到 to 之间的区别。尝试使用不同的网址

【讨论】:

嗨 Ghyllebert ,我在您的代码上方使用过,但它仍然显示相同的错误,组名中的字符错误。问题出现在 val.price 中。我认为我们不能在网址中使用点(。)

以上是关于接受对象或字典的 Django url的主要内容,如果未能解决你的问题,请参考以下文章

Django 设置 ABSOLUTE_URL_OVERRIDES

Django的路由设置

对于 django 模型,如何获取 django 管理 URL 以添加另一个或列出对象等?

将带有对象列表的字典作为 django 中的值呈现,但模板不显示值

django基础

Django框架-路由层