接受对象或字典的 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 和它调用的视图中使用相同的名称。但在模板中,您只需按照您的方式执行<a href="/product/mycart/val.price">
,您的 URLconf 为 r'^mycart/(?P<price>\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 管理 URL 以添加另一个或列出对象等?