【问题标题】:difficulty with managing the error in Django - NoReverseMatch at难以管理 Django 中的错误 - NoReverseMatch at
【发布时间】:2017-12-29 00:47:21
【问题描述】:

我需要在两次选择参数后进行查询。

  1. 有些不对劲 - 模板渲染期间出错 - valoare_detail.html 正在写入 -

    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. 我无法管理模板中的选择 - contract-list.html。

  3. 用代码告诉我正确答案。

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 %}

合同列表.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)

用代码告诉我正确答案。

【问题讨论】:

标签: python django python-3.x django-views django-urls


【解决方案1】:
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})/$']

这个错误非常明确:

  • 您的模板尝试为contract_list 视图生成一个URI。
  • url 文件指定此视图需要两个参数:
    • valoare,作为一个 4 字母字符的单词
    • tip,8 个字母的单词
  • 但是你给它的对象有BUNURItip,这对于这个url是无效的。

因此,没有反向 uri 匹配。 要解决此问题,您必须更正数据以使对象具有有效的 tip,或者,如果 6 个字符的 tip 有效,则放宽 uri 中的要求。例如,要告诉它从 4 到 8 个字符,您可以将其更改为 [A-Z]{4-8}

【讨论】:

  • 我输入了变量提示 [A-Z]{6-8} 但错误仍然相同。
  • 你可以试试[A-Z]+看看你是否还有错误?
  • 完美,有效。我的问题是关于 tempalte contract-list.html 中的两个参数查询
猜你喜欢
  • 2018-04-21
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2020-06-01
  • 2017-08-19
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多