我正在处理与特定模型相关联的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个相关术语,然后以特定的方式添加它们......大量的重复和混乱。
提前感谢您的协助。
答案 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
的查询集。