在Django中丢回一个URL

时间:2015-01-16 04:44:48

标签: python 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()

让我们假设,例如,/foo/bar如果项目的名称为too_broad_method,则应由bar捕获并处理,否则应由just_right_method处理。


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

1 个答案:

答案 0 :(得分:1)

(自问题改变的整个前提后编辑)

如果您需要抓取app_name/model_name网址,我建议您动态生成网址格式。没有理由你无法迭代INSTALLED_APPS,获取从models.Model继承的所有可用类,并相应地在列表中创建URL模式。然后,您可以将其提供给最后的patterns函数。

正如我已经解释过的那样,尝试通知URL调度程序它是某种“错误的”是错误的,而你是solving the wrong problem。相反,您应该专注于配置URL模式以实际需要它们。