You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于字符串列表自动生成Django的urlpatterns?

问题

我有一个用于定义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"),
]

我能正确传递路由字符串和kwargs字典,但无法将字符串转换为可调用的视图函数对象。请问这是否可行?我尝试了以下代码,但均无效:

for i in menu:
    url = f'"/{i}"' #传递给path()时有效
    rev = {"name": i} #传递给path()时有效

    v = f"views.{i}" #此方法无效
    v = include(f"views.{i}", namespace="myapp") #此方法同样无效
    
    urlpatterns.append(path(url, v, rev))
解决方案

完全可行,问题出在你试图用字符串"views.{i}"直接作为视图函数——这只是个字符串,不是实际的可调用函数对象。你需要从views模块中通过属性名获取对应的函数,用getattr()方法就能实现。

另外注意你的url变量多套了一层引号,直接生成f"/{i}"即可,不需要额外加双引号。

修改后的代码如下:

from django.urls import path
import views

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

for item in menu:
    # 从views模块中获取对应名称的视图函数
    view_func = getattr(views, item)
    # 生成路由路径
    route = f"/{item}"
    # 添加到urlpatterns
    urlpatterns.append(path(route, view_func, name=item))

执行后就能得到你期望的urlpatterns结构。如果视图函数分布在其他模块,先导入对应模块,再用getattr()获取即可。

内容的提问来源于stack exchange,提问作者VikSil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:52:39