python - django如何一个url绑定多个视图
PHP中文网
PHP中文网 2017-04-18 09:13:26
0
2
434

问题很简单,我有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级讲师

répondre à tous(2)
左手右手慢动作

Si un modèle d'url peut être lié à plusieurs vues, je pense que Django ne sait pas comment gérer cette requête (quelle vue doit lui être envoyée).

Mais votre problème maintenant est :

Différentes URL correspondant au même modèle nécessitent un traitement différent

Cela semble bizarre. Si tel est le cas, cela signifie probablement que votre modèle ne doit pas être écrit comme ceci. Vous devriez essayer de diviser le modèle d'URL d'origine en plusieurs modèles distincts.

Bien sûr, il est très probable que le modèle d'url soit difficile à séparer. Dans votre exemple, il peut en effet être difficile à distinguer :

(domain name)/category1/

et

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

Parce que les modèles extraits de ces deux URL sont fondamentalement exactement les mêmes que ce que vous avez dit.

Voici plusieurs approches possibles :

  1. S'il n'y a pas beaucoup de catégories, vous pouvez envisager de diviser directement la partie catégorie pour écrire le modèle d'url

  2. Utilisez un modèle d'URL, mais utilisez d'abord une vue unifiée pour le traitement, puis transférez-le vers différentes vues pour le traitement en fonction des paramètres interceptés dans l'url


Conclusion :

Les paramètres d'interception d'URL répondent uniquement à ce besoin :

La même forme de modèle d'URL doit être capable de gérer différentes URL qui correspondent au modèle mais qui sont en réalité différentes

伊谢尔伦
# 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"),
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal