用于模型访问的Django DRY URL

时间:2009-12-17 20:16:49

标签: django dry django-urls

Reader's Digest版本:如何通过获取模型名称的URL参数来获取模型中的数据(如果指定的单行或全表),而不对URLconf进行硬编码以匹配每个模型?有关详细信息,请继续阅读:

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

以下是URLconf的外观:

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

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

1 个答案:

答案 0 :(得分: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'),