python - django如何一个url绑定多个视图
PHP中文网
PHP中文网 2017-04-18 09:13:26
[Python讨论组]

问题很简单,我有2个url规则,但是可能会有冲突

url(r'^(?P<category>\w+)/$',
            CategoryView.as_view(), name='category-detail-view'),


url(r'^(?P<url>\w+)/$',CustomView.as_view(),name="custm"),

简单的看来就是这样的,这2条url,其实目的的是一样,为了访问
www.baidu.com/xxx/ 这样的分类,只是有一个是自定页面.
这样设置不行,只能取其中一个.

我想问问, django有没有办法让同一个url规则绑定多个不同的视图? 这样就很灵活了~

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
ringa_lee

一個 url pattern 如果可以綁定多個視圖,我覺得 Django 也不知道怎麼處理這個 request 了 (到底要派發給哪個 view )。

但你現在的問題是:

符合同一個 pattern 的不同 url 需要不同的處理

這聽起來怪怪的,如果說真有這種情形,那大概代表你的 pattern 不應該這樣寫,你應該試圖將原本的 url pattern 拆開寫成多個可區別的 pattern。

當然,很有可能是 url pattern 很難拆開來,以你的例子,也許的確難以區別:

(domain name)/category1/

(domain name)/www.google.com.tw/

因為這兩種 url 提取出來的 pattern 如你所講的,根本一模一樣。

以下是幾種可能的作法:

  1. 如果 category 的種類不多,可以考慮將 category 的部份直接拆開來寫 url pattern

  2. 就使用一種 url pattern,但是先用一個統一個 view 來處理,再根據 url 中截取到的參數轉發給不同的 view 處理


結論:

url 截取參數就是為了這種需求阿:

同樣形式的 url pattern 要能夠處理符合該 pattern 但實際上還是有區別的各個 url

伊谢尔伦
# get_all_categories() 获取所有分类
category_pattern = '|'.join([category for category in get_all_categories()])

url(r'^(?P<category>%s)/$' % category_pattern, CategoryView.as_view(), name='category-detail-view'),

url(r'^(?P<url>\w+)/$',CustomView.as_view(),name="custm"),
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号