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或其他应用程序中的模型匹配?
答案 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'),