2017-08-08 3 views
2

Je suis nouveau dans le framework Django et j'ai des problèmes avec ses fonctions de vue et les arguments qu'il accepte. Par exemple, considérons la fonction de vue suivante:Comment Django peut-il comprendre la différence entre slug et id in view?

def product-list(request, category_slug=None): 
categories = Category.objects.all() 
products = Product.objects.filter(not-finished=True) 
if category_slug: 
    category = get_object_or_404(Category, slug=category_slug) 
    products = products.filter(category=category) 

Mon problème est que:

  1. Comment comprendre que Django category_slug qui est passé à cette fonction est une limace et non une carte d'identité?
  2. Si la fonction avait 3 arguments comme def product-list(request, id, category_slug): comment saurait-il que le second argument est id et le dernier est le slug.

Merci beaucoup.

Répondre

2

Ceci n'est pas configuré dans la vue elle-même. La valeur transmise est définie dans le module urls.py, où vous configurez les itinéraires pour les vues. Django ne "sait" pas si une valeur transmise à la vue est un identifiant ou un slug, ni ne le devine ou ne tente de comprendre la valeur. Vous devez configurer correctement les routes en urls.py pour envoyer les bonnes valeurs aux bonnes vues.

+0

Merci pour votre aide. –

+0

Mais j'ai encore un petit problème. Au code ci-dessus, comment fonctionne si category_slug: fonctionne? –

+0

Si category_slug est quelque chose de faux, comme par exemple 'None' ou la chaîne vide' '' ', alors le corps de l'instruction if ne sera pas entré. Cette variable est utilisée pour filtrer la vue de liste de produits par catégorie. – wim