Cómo representar datos en una plantilla {% incluyó a.html%} en Django
Tengo un rank.html que es una plantilla para compartir públicamente para muchas otras plantillas a través de{% include rank.html %}
método.
Esta plantilla mostrará la base de noticias calientes de 48 horas en el número de clics.
Aquí está la vista.py
def rank(self, request):
hot_news_48h = h_mostViewed(48, News, '-pv')
return render(request, "rank.html", {
'hot_news_48h': hot_news_48h,})
h_mostViewed (48, Noticias, '-pv') es una función, que puede obtener la publicación más vista (clic) en 48 horas. Funciona.
Aquí está el rank.html:
<ul>
{% for hot_view in hot_news_48h %}
<li>
<a href="{% url 'news:news_detail' hot_view.pk %}" >
<img src="{{ MEDIA_URL }}{{ hot_view.image }}" >
</a>
<a href="{% url 'news:news_detail' hot_view.pk %}">
<h6>{{ hot_view.title }}</h6>
</a>
</div>
</li>
{% endfor %}
</ul>
Aquí está la url.py
path('hot_news', views.rank, name="hot_news")
El problema es que solo puedo obtener el html, pero no puedo recibir los datos.
Pero si abandono el método {% include rank.html%} e inserto el código de rank.html directamente dentro de cada plantilla que necesita esta función, puedo obtener los datos. Tome la plantilla new_detail.html como ejemplo:
Aquí está la vista.py
def newsDetailView(request, news_pk):
news = get_object_or_404(News, id=news_pk)
all_comments = NewsComments.objects.filter(news=news)
news.comment_nums = all_comments.count()
news.save()
News.objects.filter(id=news_pk).update(pv=F('pv') + 1)
hot_news_48h = h_mostViewed(48, News, '-pv')
relative_news = News.objects.filter(tag__id__in=news.tag.all()).exclude(id=news_pk)[:6]
return render(request, "news_detail.html", {
'news': news,
'all_comments': all_comments,
'hot_news_48h': hot_news_48h,
'relative_news': relative_news
})
Aquí está el urls.py
path('-<int:news_pk>', views.newsDetailView, name="news_detail"),
Así arriba, inserté directamente el código de rank.html en new_detail.html y funciona. Puedo obtener los datos.
Mi pregunta es qué debo hacer o corregir, para poder obtener los datos en el método {% include rank.html%}. Porque {% include rank.html%} es simple y flexible. No quiero repetir el mismo código en varias plantillas.
¡Muchas gracias por su paciencia