是否可以从字符串制作 Django urlpatterns?

Is it possible to make Django urlpatterns from a string?

提问人:VikSil 提问时间:10/31/2023 更新时间:10/31/2023 访问量:29

问:

我有一个字符串列表,用于在 Django 布局模板中定义导航窗格。我想对视图函数名称使用相同的列表,并使用循环来相应地在 urls.py 中定义urlpatterns。

例:

menu = ["register", "login", "logout"]
urlpatterns = [path("", views.index, name="index"),]

综上所述,我想到达

urlpatterns = [
    path("", views.index, name="index"),
    path("/register", views.register, name="register"),
    path("/login", views.login, name="login"),
    path("/logout", views.logout, name="logout"),
]

我能够将路由作为 str 传递,将 kwargs 作为字典传递,但难以将字符串转换为可调用视图函数的名称。这可能吗?

for i in menu:
    url = f'"/{i}"' #works when passed as parameter to path()
    rev = {"name": i} #works when passed as parameter to path()

    v = f"views.{i}" #this does not work
    v = include(f"views.{i}", namespace="myapp") #this does not work either
    
    urlpatterns.append(path(url, v, rev))
python django django 视图 django-urls

评论


答:

2赞 willeM_ Van Onsem 10/31/2023 #1

是的,您可以使用:

menu = ['register', 'login', 'logout']
urlpatterns = [
    path('', views.index, name='index'),
    *[path(f'{name}/', getattr(views, name), name=name) for name in menu],
]