NoReverseMatch несмотря на следующие примеры - PullRequest
0 голосов
/ 28 февраля 2020

Я довольно новичок в Django - Следуя многим примерам и учебным пособиям в Интернете - я некоторое время выпускал свои различные модели. Я столкнулся с ошибкой:

NoReverseMatch at /Organisation/organisations Reverse for 'Organisation' not found. 'Organisation' is 
not a valid view function or pattern name.' 
Request Method: GET Request
URL:    http://127.0.0.1:8000/Organisation/organisations Django 
Version:    3.0 
Exception Type: NoReverseMatch 
Exception Value:     Reverse for 'Organisation' not found. 'Organisation' is not a valid view 
function or pattern name. 

Ниже приведены сведения о коде, который я использую:

def get_absolute_url(self):
        #Returns the url to access a detail record for organisation.
        return reverse('Organisation.views.OrganisationDetail', args=[str(self.Form_Field_OrgID)])     

Моя соответствующая модель -

Form_Field_OrgID = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    Form_Field_OrgName = models.CharField(max_length=100, help_text='Enter Organisation Name', verbose_name = "Organisation Name")
    Form_Field_OrgAddr = models.CharField(max_length=50, help_text='Enter Organisation Address', verbose_name = "Organisation Address")
    Form_Field_OrgAddr2 = models.CharField(max_length=50, help_text='Enter Organisation Address', verbose_name = "Organisation Address")
    Form_Field_OrgAddr3 = models.CharField(max_length=50, help_text='Enter Organisation Address', verbose_name = "Organisation Address")
    Form_Field_OrgAddr4 = models.CharField(max_length=50, help_text='Enter Organisation Address', verbose_name = "Organisation Address")
    Form_Field_OrgCountry = models.CharField(max_length=250, help_text='Select Organisation Country', verbose_name = "Organisation Country")
    Form_Field_OrgPcode = models.CharField(max_length=10, help_text='Enter Organisation Post Code', verbose_name = "Organisation Address")
    Form_Field_OrgEmail = models.EmailField(max_length=254, help_text='Enter Organisation Email', verbose_name = "Organisation Email Address")
    Form_Field_OrgPhone = models.CharField(max_length=12, help_text='Enter Organisation Phone Number', verbose_name = "Organisation Phone Number")
    Form_Field_OrgWebAddr = models.URLField(max_length=250, help_text='Enter Organisation Web Address', verbose_name = "Organisation Web Address")
    Form_Field_OrgVisible = models.BooleanField ( help_text='Is This Organisation Visable', verbose_name = "Show Organisation")
    Form_Field_OrgAddedBy = models.CharField(max_length=200, help_text='Who is Enter the Information', verbose_name = "Added By")
    Form_Field_OrgDateAdded = models.DateTimeField(default=datetime.now, verbose_name = "Date Added")
    Form_Field_OrgUserDefined = models.CharField(max_length=200, help_text='Enter any other Details', verbose_name = "Organisation Notes")

My Relevant view.py

from django.shortcuts import render
from django.db import models
from Organisation.models import Organisation, Departments, OrgDrtRpt
from django.views import generic

def index(request):

    return render(request, 'index.html')




  class OrganisationList(ListView):
    model = Organisation
    context_object_name ='all_organisations'



    class OrganisationDetail(DetailView):
    model = Organisation 
    context_object_name ='organisation_detail' 

My Urls.py

    from django.urls import path
    from . import views
    from django.conf.urls.static import static
    app_name ='Organisation'


    urlpatterns = [
    path('list/', OrganisationList.as_view()),
    path('details/<uuid:pk>', OrganisationDetail.as_view(), name ='organisation_detail'),


]  

my organisation_list. html

{% extends 'baseNotLoggedIn.html' %}

{% block title %}Organisation Home {% endblock title %}
{% block nav-style %}mkt-nav{% endblock nav-style %}

{% block content %} 

    {% if organisation_list %}
    <h1>All Organisations total ={{num_Organisations}}</h1>
    <ul>
        {% for Organisation in organisation_list %}
            <li>
                <a href="{{Organisation.get_absolute_url}}">{{Organisation.Form_Field_OrgName}}</a>({{Organisation.Form_Field_OrgAddr}}) <p>There are some</p>
            </li>
        {% endfor %}
    {% else %}
        <p> There are no organisations available </p>

    {%endif%}
    {# Hero Section #}  

    {# Main Section #}

{% endblock content %}

Если я изменю get_absolute_url на возвратный рендер, представление списка работает нормально .... но я все еще получаю ошибку без обратного соответствия

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Итак ... через несколько дней:

Мне удалось проверить мои urls.py и views.py -

Views.py:

from django.views.generic import ListView, DetailView,CreateView
from Organisation.models import Organisation

def index(request):

    return render(request, 'index.html')


class OrganisationList(ListView):
    template_name = 'organisation_list'
    model = Organisation
    context_object_name ='organisation_list'


class OrganisationDetail(DetailView):
    model = Organisation 
    context_object_name ='organisation_detail'

с urls.py:

from django.urls import path
from Organisation.views import OrganisationList,OrganisationDetail,OrganisationCreate
from django.conf.urls.static import static
app_name ='Organisation'
from .import views

urlpatterns = [
    path('', views.index, name='index'),
    path('list/', OrganisationList.as_view()),
    path('create/', OrganisationCreate.as_view()),
    path('details/<uuid:pk>', OrganisationDetail.as_view(), name ='organisation_detail'),

список_организаций. html выглядит следующим образом:

{% extends 'baseNotLoggedIn.html' %}

{% block title %}Organisation Home {% endblock title %}
{% block nav-style %}mkt-nav{% endblock nav-style %}

{% block content %} 

    {% if organisation_list %}



        <table class="table table-hover">
            <thead>
                <tr>
                    <th scope="col">Name </th>
                    <th scope="col">Address</th>
                    <th scope="col">Phone</th>
                </tr>
            </thead>
            <tbody>
            {% for Organisation in organisation_list %}
            <tr>


                <td><a href="{{Organisation.get_absolute_url}}">{{Organisation.Form_Field_OrgName}}</a></td>
                <td>{{Organisation.Form_Field_OrgAddr}}</td>
                <td>{{Organisation.Form_Field_OrgPhone}}</td>

            </tr>
            {% endfor %}
            </tbody>
        </table>


    {% else %}
        <p> There are no ations available </p>

    {%endif%}
    {# Hero Section #}  

    {# Main Section #}

{% endblock content %}

TH. models.py Выглядит так:

import uuid
from django.db import models
from datetime import datetime
from django.urls import reverse

# Class defines the organisation - Organisation part of superclass - Actors  / All Fields are mandatory
class Organisation(models.Model):

    Form_Field_OrgID = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    Form_Field_OrgName = models.CharField(max_length=100, help_text='Enter Organisation Name', verbose_name = "Organisation Name")
    Form_Field_OrgAddr = models.CharField(max_length=50, help_text='Enter Organisation Address', verbose_name = "Organisation Address")
    Form_Field_OrgAddr2 = models.CharField(max_length=50, help_text='Enter Organisation Address', verbose_name = "Organisation Address")
    Form_Field_OrgAddr3 = models.CharField(max_length=50, help_text='Enter Organisation Address', verbose_name = "Organisation Address")
    Form_Field_OrgAddr4 = models.CharField(max_length=50, help_text='Enter Organisation Address', verbose_name = "Organisation Address")
    Form_Field_OrgCountry = models.CharField(max_length=2, help_text='Select Organisation Country', verbose_name = "Organisation Country")
    Form_Field_OrgPcode = models.CharField(max_length=10, help_text='Enter Organisation Post Code', verbose_name = "Organisation Address")
    Form_Field_OrgEmail = models.EmailField(max_length=254, help_text='Enter Organisation Email', verbose_name = "Organisation Email Address")
    Form_Field_OrgPhone = models.CharField(max_length=12, help_text='Enter Organisation Phone Number', verbose_name = "Organisation Phone Number")
    Form_Field_OrgWebAddr = models.URLField(max_length=250, help_text='Enter Organisation Web Address', verbose_name = "Organisation Web Address")
    Form_Field_OrgVisible = models.BooleanField ( help_text='Is This Organisation Visable', verbose_name = "Show Organisation")
    Form_Field_OrgAddedBy = models.CharField(max_length=200, help_text='Who is Enter the Information', verbose_name = "Added By")
    Form_Field_OrgDateAdded = models.DateTimeField(default=datetime.now, verbose_name = "Date Added")
    Form_Field_OrgUserDefined = models.CharField(max_length=200, help_text='Enter any other Details', verbose_name = "Organisation Notes")
    # string to represent the model object
    def __str__(self):
        return self.Form_Field_OrgName

    def get_absolute_url(self):
        #Returns the url to access a detail record for organisation.
        #return reverse('Organisation:organisation_details', 'pk:self.pk')
      # return '/Organisations/details/%i' % str(self.Form_Field_OrgID)
        #return reverse('Organisation:OrganisationDetail', kwargs={'uuid':self.pk})
        return reverse('organisation_detail', args=[str(self.pk)])

Я попробовал комбинацию различных get_absolute_url (self): как может показаться выше из закомментированного раздела. Все они либо не работают с:

NoReverseMatch в / Organization / list / Reverse для «организация» не найден. 'Organization' не является допустимой функцией представления или именем шаблона. Метод запроса: GET URL запроса: http://127.0.0.1: 8000 / Organization / list /

аналогично на / admin / site. Я нажимаю на представление организации на сайте, используя

return reverse('Organisation:OrganisationDetail'...... i get the following

NoReverseMatch по адресу / admin / r / 11 / 0b611e28-bcad-426f-a713-4259f4ec093c / Обратный для 'view-detail-view' 'не найден. 'model-detail-view' не является допустимой функцией представления или именем шаблона. Метод запроса: GET URL запроса: http://127.0.0.1: 8000 / admin / r / 11 / 0b611e28-bcad-426f-a713-4259f4ec093c /

Я рассмотрел различные примеры в документы, но ничего не имеет смысла -

0 голосов
/ 28 февраля 2020

Вам необходимо включить пространство имен :

reverse('Organisation:Organisation', kwargs={'pk':self.pk})

Примечание, это Django отраслевой стандарт для имен URL регистра змей:

reverse('organisation:organisation', kwargs={'pk':self.pk})
...