Python 从模板访问Django CreateView中的模型名称
我正在使用Django 1.6中的通用CRUD视图,例如:Python 从模板访问Django CreateView中的模型名称,python,django,templates,Python,Django,Templates,我正在使用Django 1.6中的通用CRUD视图,例如: class KanriCreateView(CreateView): template_name = 'generic_form.html' class KanriUpdateView(UpdateView): template_name = 'generic_form.html' 等等 注意:这些类被用作基类,在整个项目中,我在views.py文件中为其子类 为了保持干燥,我正在为所有创建/更新视图编写一个通用表单
class KanriCreateView(CreateView):
template_name = 'generic_form.html'
class KanriUpdateView(UpdateView):
template_name = 'generic_form.html'
等等
注意:这些类被用作基类,在整个项目中,我在views.py文件中为其子类
为了保持干燥,我正在为所有创建/更新视图编写一个通用表单模板
对于更新视图,我可以访问模板中的对象
,这是我正在更新的实例。然后我使用object.\uuuuuuu class.\uuuuuu name.\uuuuuuuuu
(通过自定义过滤器)获取类的名称(这样我就可以自动生成自定义按钮,如“添加用户”、“添加角色”等,这样表单看起来就不那么通用了
当然,当我在CreateView
中使用模板时,object
不存在(因为它还没有被创建),因此我的自定义按钮等不起作用,我得到一个VariableDoesNotExist
异常
Django是否提供了类,以便我可以在模板中使用它
KanriCreateView
ContextDataMixin
提供),则可以访问视图类的model
属性,并获取模型的名称:{{view.model.\uuuu name\uuuu}
干杯如果您在CreateView中使用ModelForm,那么这不太有效。这是因为您没有指定
model = MyModel
form_class = MyModelForm
但是你却在指定
model = MyModel
form_class = MyModelForm
所以你能做的是
from django.contrib.admin.utils import model_ngettext
model_ngettext(self.form_class._meta.model, 1)
我建议为Django 2和3更新一个解决方案:从与CreateView关联的ModelForm中检索模型详细名称
class YourCreateView(CreateView):
form_class = YourModelForm
def get_context_data(self, **kwargs):
"""Add the models verbose name to the context dictionary."""
kwargs.update({
"verbose_name": self.form_class._meta.model._meta.verbose_name,})
return super().get_context_data(**kwargs)
现在您可以在模板中使用{{verbose\u name}
from django.utils.translation import ugettext_lazy as _
class MyModel(models.Model):
class Meta:
verbose_name = _("your verbose name")
请注意上面代码片段中的双\u meta
:第一个用于从ModelForm访问模型,而第二个用于访问模型的详细名称
与国际化一样,请注意,如果您的模型使用如下所示的ugettext,则详细名称将在模板中自动转换
from django.utils.translation import ugettext_lazy as _
class MyModel(models.Model):
class Meta:
verbose_name = _("your verbose name")
关于1,当我在帖子中写签名时,这是一个打字错误,请放心,它不是这样写的;)。我已经修好了。否则,非常感谢。我相信这在Django 3>TemplateSyntaxError中不再可用。错误变量和属性不能以下划线开头:“view.model.\uuuu name\uuuuu”