在 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 模式。
这是一个相对简单的问题。
如果可能的话,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 模式。