在 Django 中返回 URL

Throwing back a URL in Django

这是一个相对简单的问题。

如果可能的话,views.py 中的方法是否可以动态地返回一个 URL 它在错误中捕获并让稍后的处理程序处理它。例如:

urls.py

urlpatterns = patterns('myapp.views',
    url(r'^foo/(?P<fiz>\d+)/?$', too_broad_method,name="foo"),
    url(r'^foo/bar/?$', just_right_method,name="foo"),
)

views.py

def too_broad_method(request,fiz=None):
    if fiz == some_dynamic_value:
        # under some runtime conditions fiz can equal bar
        # Throw some exception to give the URL back??
    else:
        return process_it()

举个例子,如果项目的名称为 bar/foo/bar 应该被 too_broad_method 捕获和处理,否则它应该被 just_right_method 处理。


对于额外的上下文,我正在尝试捕获 app_label/model_name 形式的 url,它不遵循任何模式。我希望首先捕获这些,然后再捕获,这意味着使用非常广泛的正则表达式。

(由于问题的整个前提发生了变化而进行了编辑)

如果您需要捕获 app_name/model_name URL,我的建议是动态生成 URL 模式。您没有理由不能遍历 INSTALLED_APPS,获取所有继承自 models.Model 的可用 类,并相应地在列表中创建 URL 模式。然后你可以把它输入到最后的 patterns 函数中。

试图通知 URL 调度员它不知何故 "wrong" 是错误的,正如我已经解释过的,而你是 solving the wrong problem。相反,您应该专注于根据实际需要配置 URL 模式。