用于模型访问的Django DRY URL

Zac*_*ack 2 django dry django-urls

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

我正在创建一个有三个模型的应用程序,我想创建一个简单的视图,它取一个模型的名称,并吐出模型的默认管理器Model.manager.all(),,如果有一个slug,一个匹配该slug的对象.我不知道该怎么做,所以我遇到了必须单独为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'),
Run Code Online (Sandbox Code Playgroud)

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

f4n*_*4nt 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)
Run Code Online (Sandbox Code Playgroud)

然后在网址中:

 (r'^(?P<model_name>[-\w]+/(?P<slug>[-\w]+)/$', 'model_detail_view', 'model_detail'),
Run Code Online (Sandbox Code Playgroud)