我有两个基于类的视图,比如“类别”和“产品”。
我试图实现的事实上非常简单
“类别”包含一个网址(让我们说“食物”),这意味着当我按下这样的网址时:
mydjango.com/myapp/food/
它实际上在数据库中搜索是否有任何“类别”对象具有与“食物”匹配的URL
网址模式是这样的:
url(r'^(?P<rel_url>.+)/$', login_required(is_allowed(Category.as_view())), name='category')
现在假设我想访问一个产品(来自“产品”模型),该产品包含在类别匹配“food”中作为url。例如:
mydjango.com/myapp/food/rice
Product模型中的url字段如下所示“food / rice”
然后我的url模式看起来与上面完全相同,除了视图的名称
问题是,django只检查第一个url并告诉我没有包含'food / rice'url的Category对象。这是有道理的,因为该URL存储在Product模型中。
更简单的问题:如何根据我匹配的模式访问两个不同的视图?
mydjango.com/myapp/food
必须使用“类别”视图(使用rel_url)
mydjango.com/myapp/food/rice
与任何类别都不匹配,然后使用“产品”视图。
顺便说一下,我知道这不是好方法,但这是我找到的唯一解决方案(应用程序远比仅仅类别/产品复杂)
答案 0 :(得分:1)
您需要根据网址格式进行区分,然后在urls.py中首先移动更具体的模式。将使用匹配的第一个模式。
这会引导你:
url(r'^(?P<cat>[^/]+)/(?P<prod>[^/]+)/$', Product.as_view(), name='product')
url(r'^(?P<cat>.+)/$', Category.as_view(), name='category')