2017-09-30 4 views
1

Je suis un peu bloqué sur la façon d'afficher les titres de 2 pages qui listent des articles de catégories différentes en utilisant le même modèle. Mes modèles d'articles ont un contenu, une catégorie (sport, politique, technologie, etc.) et un statut. Je veux afficher une page listant tous les articles de sport et une page listant la politique et je veux utiliser le même modèle. J'ai essayé stocker le titre comme une variable dans la vue, mais cela ne fonctionne pasDjango affiche un titre de page basé sur une variable stockée dans une vue

Views.py

def sport_landing(request): 
    page_title = 'Sport' 
    cat_landing = Article.objects.filter(status='published', category='sport', published_date__lte=timezone.now() 
     ).order_by('-published_date') 
    return render(request, "categorylanding.html", {'cat_landing': cat_landing} 

Modèle

{% extends 'base.html' %} 
    {% load humanize %} 
    {% block content %} 
    <div class="row category-landing-title"> 
     <div class="col-xs-12"> 
      {% page_title %} 
     </div> 
    </div> 
. 
. 
. 

Est-ce même la meilleure façon de le faire?

Répondre

0

Vous devez passer la variable au contexte:

def sport_landing(request): 
    page_title = 'Sport' 
    cat_landing = Article.objects.filter(status='published', category='sport', published_date__lte=timezone.now() 
     ).order_by('-published_date') 
    return render(request, "categorylanding.html", {'cat_landing': cat_landing, 'page_title':page_title } 

et utiliser des accolades doubles { dans le modèle ({% %} est utilisé pour les balises de modèle):

{{page_title}} 

Pour répondre à propos de l'ensemble du modèle, vous pouvez éviter de répéter le code pour chaque catégorie en utilisant un paramètre dans le modèle d'URL:

Ajouter et adapter cette ligne dans le fichier urls.py, cela vous permettra de passer de la catégorie en tant que paramètre à votre vue:

url(r'^category/(?P<category>\w+)', views.cat_landing) # i.e : mysite/category/sport 

Vous devez déclarer une vue générique comme:

def cat_landing(request, category=None): 
    if category: 
     cat_landing = Article.objects.filter(status='published', category=category, 
              published_date__lte=timezone.now() 
            ).order_by('-published_date') 

     return render(request, "categorylanding.html", 
         {'cat_landing': cat_landing, 'page_title':category.title() } 
    else: 
     return [...redirect to main menu... ] 
+1

espace unessecary après ' 'page_title '' doit être: '{' cat_landing': cat_la nding, 'page_title': page_title} ' – DrumBongo

+0

si cela fonctionne accepter la réponse. S'il y a beaucoup d'espace, vous pouvez le supprimer ... – hansTheFranz

+0

@DrumBongo J'ai ajouté une modification pour répondre à la dernière question – PRMoureu

0

titre Pass comme contexte

def sport_landing(request): 
    page_title = 'Sport' 
    cat_landing=Article.objects.filter(tatus='published',category='sport',published_date__lte=timezone.now() 
    ).order_by('-published_date') 
    return render(request, "categorylanding.html", {'cat_landing': cat_landing,'page_title':page_title} 



     {% extends 'base.html' %} 
     {% load humanize %} 
     {% block content %} 
     <div class="row category-landing-title"> 
     <div class="col-xs-12"> 
     {{ page_title }} 
     </div> 
     </div>