2017-07-23 2 views
1

Je dois faire une requête après deux sélection des paramètres.dificulty avec la gestion de l'erreur dans Django - NoReverseMatch à

  1. Quelque chose rong est - Erreur lors du rendu de modèle - valoare_detail.html et il est en train d'écrire -

    NoReverseMatch at /valoare/MICA/ Reverse for 'contract_list' with arguments '()' and keyword arguments '{'valoare': 'MICA', 'tip': 'BUNURI'}' not found. 1 pattern(s) tried: ['valoare/(?P<valoare>[A-Z]{4})/(?P<tip>[A-Z]{8})/$'] 
    
  2. Je ne peux pas gérer la sélection dans le modèle - contrat-list.html.

  3. Dites-moi la bonne réponse dans le code.

models.py

class Valoare(models.Model): 
    VALOARE_CHOICES = (
     ("MICA","mica"), 
     ("MARE","mare"), 
    ) 
    tip_valoare = models.CharField(max_length=4, choices=VALOARE_CHOICES, default="MICI", verbose_name='valoarea contractului') 
    file_name = models.FileField(null=True, blank=True, upload_to='contracte/templates/contracte/img/', verbose_name='img path') 

def __str__(self): 
    return self.tip_valoare 


class Tip(models.Model): 
    TIP_CHOICES = (
     ("BUNURI","bunuri"), 
     ("SERVICII","servicii"), 
     ("LUCRARI","lucrari"), 
    ) 
    tip_contract = models.CharField(max_length=8, choices=TIP_CHOICES, default="BUNURI", verbose_name='tipul contractului') 
    file_name = models.FileField(null=True, blank=True, upload_to='contracte/templates/contracte/img/', verbose_name='img path') 

    def __str__(self): 
     return self.tip_contract 


class Contract(models.Model): 
    valoare = models.ForeignKey('Valoare') 
    tip = models.ForeignKey('Tip') 
    data = models.DateField(blank=True, null=True) 
    file_name = models.FileField(null=True, blank=True, upload_to='pdf/', verbose_name='contract file name') 

    def __str__(self): 
     return str(self.CPV) 

    class Meta: 
     ordering = ["data"] 

urls.py

from django.conf.urls import url 
from . import views 


urlpatterns = [ 
    url(r'^$', views.valoare_list, name='valoare_list'), 
    url(r'^valoare/(?P<valoare>[A-Z]{4})/$', views.valoare_detail, name='valoare_detail'), 
    url(r'^valoare/(?P<valoare>[A-Z]{4})/(?P<tip>[A-Z]{8})/$', views.contract_list, name='contract_list'), 
] 

views.py

from django.shortcuts import render, get_object_or_404 
from .models import Valoare, Tip, Contract 


def valoare_list(request): 
    valoares = Valoare.objects.all() 
    return render(request, 'contracte/valoare_list.html', {'valoares': valoares}) 


def valoare_detail(request, valoare): 
    valoare = get_object_or_404(Valoare, tip_valoare=valoare) 
    tips = Tip.objects.all() 
return render(request, 'contracte/valoare_detail.html', { 'valoare': valoare, 'tips':tips }) 


def contract_list(request, valoare, tip): 
    valoare = get_object_or_404(Valoare, tip_valoare=valoare) 
    tip = get_object_or_404(Tip, tip_contract=tip) 
    return render(request, 'contracte/contract_list.html', {'valoare': valoare, 'tip': tip}) 

valoare_list.html

{% for valoare in valoares %} 
    <a href="{% url 'valoare_detail' valoare=valoare.tip_valoare %}"> 
      {{ valoare.tip_valoare }} 
    </a><br> 
{% endfor %} 

valoare-detail.html

{% for tip in tips %} 
     <a href="{% url 'contract_list' valoare=valoare.tip_valoare tip=tip.tip_contract %}"> 
      {{ tip.tip_contract }} 
     </a><br> 
{% endfor %} 

contrat list.html

Valoare: {{ valoare.tip_valoare }} <br> 
Tip Contract: {{ tip.tip_contract }} 
(????? the result is to be the selection from model Contract by this two parameters in this template) 

Dites-moi la bonne réponse dans le code.

Répondre

2
NoReverseMatch at /valoare/MICA/ Reverse for 'contract_list' with arguments '()' 
and keyword arguments '{'valoare': 'MICA', 'tip': 'BUNURI'}' not found. 
1 pattern(s) tried: ['valoare/(?P<valoare>[A-Z]{4})/(?P<tip>[A-Z]{8})/$'] 

Cette erreur est assez explicite:

  • votre modèle tente de générer un URI pour la vue contract_list.
  • fichiers URL indique que ce point de vue nécessite deux arguments:
    • valoare, comme un mot de 4 caractères alphabétiques
    • tip, comme un mot de 8 caractères alphabétique
  • mais l'objet vous l'avez donné BUNURI comme tip, ce qui est invalide pour cette URL.

Ainsi, aucun URI inverse ne correspond. Pour corriger, vous devez soit corriger vos données afin que l'objet ait un tip valide ou, si un tip à 6 caractères est valide, assouplir les exigences dans l'uri. Par exemple, pour dire qu'il de 4 à 8 caractères, vous changeriez à [A-Z]{4-8}

+0

Je mets pour la pointe variable [A-Z] {6-8} mais l'erreur reste la même. – Mircea

+0

Pourriez-vous essayer [A-Z] + 'et voir si vous avez toujours l'erreur? – spectras

+0

parfait, ça marche. Ma question concerne deux paramètres de requête dans tempalte contract-list.html – Mircea