recherche

Maison  >  Questions et réponses  >  le corps du texte

python - django如何一个url绑定多个视图

问题很简单,我有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中文网2767 Il y a quelques jours417

répondre à tous(2)je répondrai

  • ringa_lee

    ringa_lee2017-04-18 09:15:26

    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

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:15:26

    # 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"),

    répondre
    0
  • Annulerrépondre