Django:通过u传递模型对象名

2024-04-25 04:55:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把模型名作为参数传递给视图.py
但效果不是很好
请指导我怎么做谢谢

当我转到http://127.0.0.1:8000/filter/image/party/
有错误说:

'unicode' object has no attribute 'objects'

但终端可以打印mm='Party'

这是我的代码:

在模型.py公司名称:

^{pr2}$

在网址.py公司名称:

urlpatterns = patterns('',
    url(r'^image/(?P<model>\w+)/$', views.object_list_1 ),

在视图.py公司名称:

def object_list_1(request, model):
    mm =  model.capitalize()
    obj_list = mm.objects.all()        
    template_name = 'filterimgs/%s_list.html' % mm.lower()
    return render_to_response(template_name, {'object_list': obj_list, 
                          context_instance=RequestContext(request))

Tags: namepy模型image名称视图objmodel
2条回答

您应该将model名称映射到模型类。在

一种方法是使用getattr从app模块获取模型实例。在

from app_name import models

def object_list_1(request, model):
    mm =  model.capitalize()
    cls = getattr(models, mm)
    obj_list = cls.objects.all()
    template_name = 'filterimgs/%s_list.html' % mm.lower()
    return render_to_response(template_name, {'object_list': obj_list,
                          context_instance=RequestContext(request))

或使用显式映射:

^{pr2}$

不确定为什么您认为这会起作用:仅仅对字符串调用capitalize()并不能神奇地将其转换为模型类。在

您需要在Django的模型注册表中按名称查找实际的类。幸运的是,这里有一个函数:get_model。在

from django.db.models.loading import get_model
cls = get_model(app_name, model)
obj_list = cls.objects.all() 

相关问题 更多 >