通过 Django 模板中的视图传递变量

Posted

技术标签:

【中文标题】通过 Django 模板中的视图传递变量【英文标题】:Passing Variables through Views in Django Template 【发布时间】:2012-06-30 19:11:36 【问题描述】:

试图弄清楚如何在 Django 模板系统中访问我的变量。我的models.py:

class SubCategory(models.Model):
   name = models.CharField(max_length=50, unique=True)
   category = models.ManyToManyField(Category)

我的看法:

from myapp.models import Category, SubCategory

def create_in_category(request, slug):
   category = get_object_or_404(Category, slug=slug)
   subcategory = SubCategory()

   ad = Ad.objects.create(category=category, subcategory=subcategory, user=request.user,
                       expires_on=datetime.datetime.now(), active=False)
   ad.save()
   return redirect('myapp_create_ad_edit', pk=ad.pk)
...

class AdCreationEditView(AdEditView):
   def get_queryset(self):
       qs = super(AdEditView, self).get_queryset()
       return qs.filter(active=False, user=self.request.user)

   def get_success_url(self):
       return reverse('classifieds_create_ad_preview',
                      kwargs=dict(pk=self.object.pk))

   def get_context_data(self, **kwargs):
       context = super(AdCreationEditView, self).get_context_data(**kwargs)
       context['create'] = True
       return context

我希望能够在我的模板中访问 subcategory ,但由于我认为错误而导致错误:'subcategory' is an invalid keyword argument for this function。任何建议将不胜感激。谢谢

【问题讨论】:

您在哪里使用模板?我在这里没有看到任何模板渲染。 实际上渲染该模板是什么?您列出的功能只是重定向,它不呈现任何内容。 这不是您呈现模板的视图。你是在重定向,而不是渲染。 【参考方案1】:

该错误并非来自您的模板,与您的问题无关。 subcategory 是 ManyToMany 关系,您不能在对象实例化时定义它们,因为这种关系是通过链接表实现的——您需要先保存 Category 和 Subcategory 对象。

关于如何将对象传递给模板的实际问题的答案已在教程中得到完整解答。

【讨论】:

感谢您的回复。是的,我已经多次阅读教程和 djangobook。虽然我已经阅读了文档,但我并不完全理解如何将它应用到我的场景中,这就是为什么我希望有另一双眼睛。我尝试使用访问subcategory = get_list_or_404(Subcategory),但仍然不确定如何正确定义视图内的元素。感谢您的任何想法。 我真的不知道怎么回答你。您有两个主要问题:首先,错误消息阻止您首先创建类别/子类别对象;其次,关于如何将内容传递给模板的困惑。您应该首先证明您已经修复了第一个问题,然后也许我们可以清除关于模板的任何剩余混淆。

以上是关于通过 Django 模板中的视图传递变量的主要内容,如果未能解决你的问题,请参考以下文章

将 request.user 传递给 Django 中的模板

将模板中的按钮中的 id 传递给 Django 视图

Django - 将变量从基于类的视图传递到模板

Django - 将变量从函数视图传递到 html 模板

Django:将模板值发布到视图

django模板系统---2