[英]Django : NoReverseMatch error
大家!
我是Django的新手,实际上是在做一个研究项目。 我收到了NoReverseMatch异常,无法理解原因。 似乎没有名称空间冲突,其他列表视图的创建方式与StoredItem模型相同,但只有此方法引发异常:
models.py:
from django.db import models
from django.urls import reverse
# Create your models here.
class LegalEntity(models.Model):
name = models.CharField(max_length=100, help_text="Name")
rif = models.CharField(max_length=10, help_text="RIF")
address = models.TextField(help_text="Address")
phone_num = models.CharField(max_length=15, help_text="Phone number")
def __str__(self):
pass
class Contract(models.Model):
name = models.CharField(max_length=100, help_text="Name")
number = models.CharField(max_length=50, help_text="Contract number")
description = models.TextField(help_text="Contract description")
start_date = models.DateField(null=False, blank=False, help_text="Start date")
expiry_date = models.DateField(null=True, blank=True, help_text="Expiry date")
def __str__(self):
return "number: {0}, " \
"name: \"{1}\", " \
"starts: {2}, " \
"expires: {3}."\
.format(self.number, self.name, self.start_date, self.expiry_date)
def get_absolute_url(self):
return reverse('contract-detail', args=[str(self.id)])
class Provider(LegalEntity):
contract = models.ForeignKey(Contract)
def __str__(self):
return "name: \"{0}\", " \
"RIF: {1}, " \
"phone: {2}."\
.format(self.name, self.rif, self.phone_num)
def get_absolute_url(self):
return reverse('provider-detail', args=[str(self.id)])
class Item(models.Model):
name = models.CharField(max_length=100, help_text="Name")
serial = models.CharField(max_length=50, help_text="Serial No.")
manufacturer = models.CharField(max_length=50, help_text="Manufacturer")
provider = models.ForeignKey(Provider)
def __str__(self):
return "name: \"{0}\", " \
"serial: {1}, " \
"manufacturer: {2}," \
"provider: {3}."\
.format(self.name, self.serial, self.manufacturer, self.provider.name)
def get_absolute_url(self):
return reverse('item-detail', args=[str(self.id)])
class StoredItem(models.Model):
item = models.ForeignKey(Item)
quantity = models.IntegerField(default=0)
def __str__(self):
return "{0} - {1}, {2} pcs.".format(self.item.serial, self.item.name, self.quantity)
def get_absolute_url(self):
return reverse('storeditem-detail', args=[str(self.id)])
urls.py
from django.conf.urls import url
from . import views
app_name = 'almacen'
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^providers/$', views.ProviderListView.as_view(), name='providers'),
url(r'^items/$', views.ItemListView.as_view(), name='items'),
url(r'^storeditems/$', views.StoredItemListView.as_view(), name='storeditems'),
url(r'^contracts/$', views.ContractListView.as_view(), name='contracts')
]
views.py
from django.shortcuts import render
from django.views import generic
# Create your views here.
from almacen.models import Contract, StoredItem, Provider, Item
def index(request):
stored_items_num = len([x for x in StoredItem.objects.all() if x.quantity > 0])
providers_num = Provider.objects.all().count()
return render(request,
'index.html',
context = {'stored_items_num': stored_items_num, 'providers_num': providers_num})
class ContractListView(generic.ListView):
model = Contract
class ProviderListView(generic.ListView):
model = Provider
class ItemListView(generic.ListView):
model = Item
class StoredItemListView(generic.ListView):
model = StoredItem
base_template.html
<!DOCTYPE html>
<html lang="en">
<head>
{% block title %}<title>Almacen Application</title>{% endblock %}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"> </script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<!-- Добавление дополнительного статического CSS файла -->
{% load static %}
<link rel="stylesheet" href="{% static 'css/styles.css' %}">
</head>
<body>
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-2 sidenav">
<h4>Options: </h4>
{% block sidebar %}
<ul class="nav nav-pills nav-stacked">
<li><a href="{% url 'almacen:index' %}">Home</a></li>
<li><a href="{% url 'almacen:items' %}">Items</a></li>
<li><a href="{% url 'almacen:providers' %}">Providers</a></li>
<li><a href="{% url 'almacen:contracts' %}">Contracts</a></li>
<li><a href="{% url 'almacen:storeditems' %}">Store</a></li>
</ul>
{% endblock %}
</div>
<div class="col-sm-9 ">
{% block content %}{% endblock %}
</div>
</div>
</div>
</div>
<footer id="center" class="container-fluid">
<p>
PerfoSAP Package Application<br>
created by caesar_84
</p>
</footer>
</body>
</html>
storeditem_list.html
{% extends 'base_template.html' %}
{% block content %}
<h1>Items list</h1>
{% if storeditem_list %}
<table style="width:100%">
<tr>
<th>Serial</th>
<th>Name</th>
<th>Manufacturer</th>
<th>Provider</th>
<th>Quantity</th>
</tr>
{% for storeditem in storeditem_list %}
<tr>
<td>
<a href="{{storeditem.get_absolute_url}}"> {{ storeditem.item.serial }} </a>
</td>
<td>{{ storeditem.item.name }}</td>
<td>{{ storeditem.item.manufacturer }}</td>
<td>{{ storeditem.item.provider.name }}</td>
<td>{{ storeditem.quantity }}</td>
</tr>
{% endfor %}
</table>
{% endif %}
{% endblock %}
这是我收到的消息:
找不到“ storeditem-detail”的反面。 “ storeditem-detail”不是有效的视图函数或模式名称。
我发现今天几个小时偷走我的错误
错误在该行的storageitem_list.html中
<a href="{{storeditem.get_absolute_url}}"> {{ storeditem.item.serial }} </a>
而不是"{{storeditem.get_absolute_url}}"
,而必须是"{{storeditems.get_absolute_url}}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.