Tengo el mismo bloque de código en 4 de mis funciones, ¿hay alguna forma de evitar repetir el mismo bloque de código?
Aquí está el mismo bloque de código:
def function_name(): ...some code... hot_news_48h = h_mostViewed(48, News, '-pv') hot_news_1w = w_mostViewed(1, News, '-pv') ...some code... return render(request, "template_name.html", { ...some code... 'hot_news_48h': hot_news_48h, 'hot_news_1w': hot_news_1w, ...some code... })
Aquí está la función 1:
def newsDetailView(request, news_pk): news = get_object_or_404(News, id=news_pk) tags = news.tag.annotate(news_count=Count('news')) News.objects.filter(id=news_pk).update(pv=F('pv') + 1) hot_news_48h = h_mostViewed(48, News, '-pv') hot_news_1w = w_mostViewed(1, 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, 'tags': tags, 'hot_news_48h': hot_news_48h, 'hot_news_1w': hot_news_1w, 'relative_news': relative_news })
Aquí está la función 2:
def tagNewsList(request, tag_pk): tag = get_object_or_404(Tag, pk=tag_pk) news_list = News.objects.filter(tag=tag) hot_news_48h = h_mostViewed(48, News, '-pv') hot_news_1w = w_mostViewed(1, News, '-pv') return render(request, "tags_list.html", { 'news_list': news_list, 'tag': tag, 'hot_news_48h': hot_news_48h, 'hot_news_1w': hot_news_1w, })
¿Algún amigo sabe como evitarlo? ¡Muchas gracias!
Gracias @ Lemayzeur tanto!
Finalmente resolví el problema usando {% include news_rank.html%} + context_processors. Me ahorra mucho código.
Aprendí cómo crear un procesador de contexto personalizado hoy.