【问题标题】:convert django url with '|' (or) regex to modern Django path用'|'转换django url (或)正则表达式到现代 Django 路径
【发布时间】:2021-03-25 03:16:03
【问题描述】:

我有一个关于将 pre - Django 2 urls 转换为 path 的问题

如果我有这样的网址:

url(
r'^some_path/(?P<type>type_one|type_two)/',
 views.SomeViewHere.as_view(),
 name='important_name',
),

问题是如何将这个 url 转换为现代 Django path 保持相同的功能和相同的名称?

重要方面:kwargs type_onetype_two 应该被传递到视图中。 Name 参数不能更改或拆分。

我做了什么:

path('some_path/', include(
    [
        path('type_one/', views.SomeViewHere.as_view(), kwargs={'type': 'type_one'}),
        path('type_two/', views.SomeViewHere.as_view(), kwargs={'type': 'type_two'}),
    ]
), name='important_name',
     ),

reverce 不适用于此配置

谢谢。

ps。 type 是一个字符串

【问题讨论】:

  • 路径 api 还提供了一个re_path() 如果它工作,为什么要删除它?
  • @Michael Lindsay,好吧,这不是我的选择。我只需要这样做。这是这种情况。但我一般同意你关于 re_path()
  • 如果您必须在路径而不是 url 或视图中执行此操作,也许这篇文章会有所帮助。 stackoverflow.com/questions/48031043/…

标签: django


【解决方案1】:

将这两个选项作为参数传递给视图,然后将任何值检查移至 SomeViewHere 类。

path('/some_path/<str:type>/', views.SomeViewHere.as_view(), name='important_name')

class SomeViewHere(View):

    def get_context_data(self, **kwargs):
         type = kwargs.get('type', None)

         if type not in ['type_one', 'type_two']:
             raise Http404("not one or two") 

         ...do rest of view....

【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2020-01-18
    • 2016-01-10
    • 2021-05-07
    • 2011-03-22
    • 2013-07-26
    • 2014-07-08
    • 1970-01-01
    相关资源
    最近更新 更多