繁体   English   中英

Django:NoReverseMatch错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM