【问题标题】:how to switch to path instead of url in urlpatterns [django]如何在 urlpatterns [django] 中切换到路径而不是 url
【发布时间】:2018-06-05 18:09:33
【问题描述】:

django noobie。我一直在阅读教程,但在 urlpatterns 中,他们使用 url 而不是现在在 django 2.0 中引入的路径 我想让 /appname/anything-gibberish 将用户带回到我在 /appname/ 中给出的视图

urlpatterns = [
    path('', views.index, name='index'),
    path('contact/', views.contact, name='contact'),
]

我想要 127.0.0.1:8000/contact/asaskhask 去 views.contact 有什么方法可以在不使用 url 和正则表达式的情况下做到这一点?

【问题讨论】:

  • 我会在您的视图方法中处理这个问题,而不仅仅是使用 URL。也就是说,检查你的view方法中的参数,如果不匹配,重定向到另一个URL
  • @Jason 不会工作,因为匹配是在 urlpattern 本身中完成的。只有成功时,控件才会转到视图
  • 为什么是重定向而不是 404 或其他错误页面?

标签: python django django-2.0


【解决方案1】:

我目前也在研究 django2。您应该考虑在 django 文档上投入更多时间

urlpatterns = [
        path('', views.index, name='index'),
        path('contact/<str:contact_name>/', views.contact, name='contact'),
    ]

这里 str 告诉 django 期待一个字符串,因为我期待名称没有任何数字或特殊字符。如果数字只像 &lt;int:contact_number&gt; 那样使用它。或旧的蛞蝓

使用这个link

哦,以防万一你错过了,匹配uid、pk或token不用再头疼了。它全部内置在 django 2.0 中。哎呀

path('<int:pk>/', views.DetailView.as_view(), name='detail'),
path('activate/<uidb64>/<token>/', UserActivate.as_view(), name='activate'),

【讨论】:

    【解决方案2】:

    我找到了解决方案。通过使用re__path 代替path,您将能够使用正则表达式

    urlpatterns = [
        path('', views.index, name='index'),
        re_path('contact/', views.contact, name='contact'),
    ]
    

    【讨论】:

    • 这是错误的,例如:如果你有一个像contact/service_desk/service_guy_name 这样的网址,这个网址可能会带来麻烦
    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 2021-01-22
    • 2020-05-05
    • 2019-05-15
    • 2021-11-13
    • 2014-01-16
    • 2014-08-11
    • 2018-06-18
    相关资源
    最近更新 更多