将值传递给Django模板

时间:2018-02-12 21:37:10

标签: django django-models django-templates django-views

我正在处理与特定模型相关联的Django模板。在此模板的视图中,我试图根据我在模板中传递的参数,从不同的模型(包含科学术语的术语)访问记录。

我尝试使用get_context_data查询数据库中的随机字词,然后使用自定义过滤器标记将该字词替换为模板中我想要的字词。 Django更聪明,但不会让我这样做。

目前,我正在尝试在views.py

中定义上下文
class ArticlesView(DetailView):
    model = models.Articles
    template_name = 'web/articles-details.html'
    context_object_name = 'Articles_details'

    def get_context_data(self, *args, **kwargs):
        ctx = super(ArticlesView, self).get_context_data(*args, **kwargs)
        ctx['featured'] = Articles.objects.filter(featured=True)
        ctx['term','arg'] = Articles.objects.filter('slug'=='arg')
        return ctx

在上面的代码中,'特色'上下文工作正常,但不是“'术语”。一。这显然是错的;我知道......但我无法弄清楚正确的语法是什么,以及如何从模板中提供参数。 (我试图打印出这个例子中“科学术语”的一小部分。)

有什么想法吗?

我知道我可以在模型中设置ForeignKey来连接它们。问题是,我至少要有4-5个科学术语'在任何给定的页面上,因此,我必须为每个页面添加至少5个相关术语,然后以特定的方式添加它们......大量的重复和混乱。

提前感谢您的协助。

1 个答案:

答案 0 :(得分:0)

你在上下文中所做的事情并不像你想象的那样有效。为了说明你使用该上下文字典做了什么;

>>> context = dict()
>>> context['slug', 'arg'] = 'test'
>>> context
{('slug', 'arg'): 'test'}
>>> context['slug']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'slug'
>>> context['arg']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'arg'
>>> context['slug', 'arg']
'test'

所以在你的模板中如果你做了类似{{slug,arg}}之类的东西,你会得到你的对象,但我不认为这在模板语法中是有效的。

所以基于你所拥有的东西,我怀疑你想要做些什么;

arg = 'my-slug'
ctx['term'] = Articles.objects.filter(slug=arg)
ctx['arg'] = arg

这会为您提供arg用于匹配Articles模型上的slug与分配给term的查询集。