【问题标题】:Same URL Pattern, two different views?相同的 URL 模式,两种不同的视图?
【发布时间】:2014-01-30 09:41:42
【问题描述】:

我有两个基于类的视图,比如说“类别”和“产品”。

我尝试实现的目标其实很简单。
“类别”包含一个网址(比如说“食物”),这意味着当我点击这样的网址时: mydjango.com/myapp/food/
它实际上在数据库中搜索是否有任何具有与“食物”匹配的 URL 的“类别”对象。
url 模式是这样的:
url(r'^(?P<rel_url>.+)/$', login_required(is_allowed(Category.as_view())), name='category')

现在假设我想访问一个产品(来自“产品”模型),该产品包含在类别匹配“食物”中作为 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 不匹配任何类别,然后它使用产品视图。

顺便说一句,我知道这不是好方法,但这是我找到的唯一解决方案(应用程序远比类别/产品复杂得多)

【问题讨论】:

    标签: regex django url


    【解决方案1】:

    您需要根据 url 模式进行区分,然后只需在 urls.py 中先移动更具体的模式。将使用第一个匹配的模式。

    这将引导您:

    url(r'^(?P<cat>[^/]+)/(?P<prod>[^/]+)/$', Product.as_view(), name='product')
    url(r'^(?P<cat>.+)/$', Category.as_view(), name='category')
    

    【讨论】:

    • 在“产品”模型中,url 是完整的 url。所以在访问数据库之前我无法真正区分它是产品还是类别。
    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    相关资源
    最近更新 更多