2

读者文摘版本:如何通过获取模型名称的 URL 参数而不硬编码 URLconfs 以匹配每个模型,从模型中获取数据(如果指定,则为单行或完整表)?有关更多详细信息,请继续阅读:

我正在制作一个包含三个模型的应用程序,我想制作一个简单的视图,该视图采用模型的名称,并吐出模型的默认管理器Model.manager.all(),,如果有 slug,则单个对象与该 slug 匹配。我不知道该怎么做,所以我遇到了必须为每个模型单独制作视图/URLconfs 的问题。

下面是 URLconfs 的样子:

(r'^model1/$', 'model1_index_view', 'model1_index'),
(r'^model1/(?P<slug>[-\w]+)/$', 'model1_detail_view', 'model1_detail'),
(r'^model2/$', 'model2_index_view', 'model2_index'),

它持续的时间有点长,但我想你明白了。我最终硬编码了相对大量的 URLconfs 来做一些我认为我可以用一个 View 来做的事情,这个 View 将 Model 名称作为参数和可选的 slug。我担心的是,如果有人指定模型名称说...用户会发生什么?是否有一段代码可以从应用程序中获取模型列表并确保它与其中一个匹配,而不是来自 contrib.auth 或其他应用程序的模型?

4

1 回答 1

8

使用 get_model:

from django.db.models import get_model

def my_view(request, model_name, item_slug):
    try:
        model = get_model('app_name', model_name)
    except:
        ## throw an error
        pass
    objects = model.objects.get(slug=item_slug)

然后在网址中:

 (r'^(?P<model_name>[-\w]+/(?P<slug>[-\w]+)/$', 'model_detail_view', 'model_detail'),
于 2009-12-17T20:36:28.907 回答