我可以将QuerySet
的输出通过字典传递给我的模板(以及单个变量),但我真的很难理解如何最好地将数据发送回模板。
例如,我有新闻文章,我想创建一个月度链接。我的news
模型有一个字段,例如news_monthyear = "2015/06"
。
我在news/views
。
def build_news_archives():
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
news_list = {}
monthyear = News_Article.objects.order_by('news_monthyear').values('news_monthyear').distinct()
for items in monthyear:
year = items['news_monthyear'][:4]
month = months[int(items['news_monthyear'][5:])-1]
news_list[monthyear] = {'Year': year, 'Month' : month}
# pdb.set_trace()
return news_list
我尝试了各种技术来构建我的news_list
变量,准备好传回模板,但是无法解决如何构建它以便我可以轻松访问数据。
我在URLConf
使用的主要功能包含以下内容:
def news(request, pID=0):
rDict = {}
if pID == 0:
p = News_Article.objects.all()[:10]
else:
p = get_object_or_404(News_Article, id=pID)
rDict['news'] = p
announcement = get_announcement()
if not announcement == None:
rDict['announcement'] = announcement
rDict['sitenav'] = clean_url(request.path, ['"', "'"])
rDict['menu'] = Menu.objects.all().order_by('menu_position')
rDict['newsarchive'] = build_news_archives()
# pdb.set_trace()
return render(request, 'en/public/news.html', rDict)
我试图像这样访问我模板中的数据,但我显然遗漏了一些非常基本的东西。
<ol class="list-unstyled">
{% for archive in newsarchive %}
<li>{{ archive.year }} + {{ archive.month }}</li>
{% endfor %}
</ol>
答案 0 :(得分:1)
build_news_archive
<ol class="list-unstyled">
{% for monthyear, archive in newsarchive.items %}
<li>{{ archive.year }} + {{ archive.month }}</li>
{% endfor %}
</ol>
返回的数据结构是一个对象。当迭代python(和django模板)中的对象时,默认情况下会迭代键
items
你可以通过在for循环中访问your_dict.items
来调用django模板中的python proceed
dict方法
https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#for
答案 1 :(得分:0)
尝试这可能有帮助
return render(request, 'en/public/news.html', locals())
<ol class="list-unstyled">
{% for archive in rDict.newsarchive %}
<li>{{ archive.year }} + {{ archive.month }}</li>
{% endfor %}
</ol>