Django 3.0.8 URL / Шаблон / Проблемы с маршрутизацией «Нет обратного соответствия» - PullRequest
0 голосов
/ 06 августа 2020

первое сообщение, простите, пожалуйста, мое незнание, так как это мое первое django приложение.

Я пытаюсь создать шаблон, который отображает всю информацию, касающуюся c "Билета" из список всех открытых заявок.

К сожалению, я получаю следующее сообщение всякий раз, когда пытаюсь добавить привязку с тегом url-адреса шаблона:

NoReverseMatch в / Tickets / tasks / Reverse for ' заказ 'с аргументами' ('',) 'не найден. 1 образец (ы) пробовали: ['билеты / заказ / (? P [^ /] +) / $ ']

Сообщение об ошибке обновлено. См. Обновление ниже.

И это ТОЛЬКО в этом шаблоне HTML.

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

models.py:

from django.db import models

# Create your models here.



class Ticket(models.Model):
    """A basic support ticket"""
    # User ticket title. 
    ticket_Name = models.CharField(max_length=50)
    
    # When the request was submitted.
    ticket_Submitted = models.DateTimeField(auto_now_add=True)
    
    #Ticket Type
    ticketTypeChoices=[
        ('Update', 'Article Edit/Update'),
        ('Addition', 'New Content/Article Request'),
        ('Typo', 'Article Typo/Formatting Issue'),
        ('Issue', 'Website Error/Issue'),
        ('Other', 'Other'),
    ]

    # Type of ticket (Update, Addition, Typo, Site Issue)
    ticket_Type = models.CharField(
        max_length=50,
        choices=ticketTypeChoices,
        default= 'Other'
    )
    # Users Name
    ticket_Contact = models.CharField(max_length=50)
    # User Email (for follow up)
    ticket_Email = models.EmailField(max_length=254)
    # Article URL (if applicable)
    ticket_URL = models.CharField(blank=True, max_length=254)
    # User description of the issue. 
    ticket_Description = models.TextField()
    
    #Ticket Status Choices
    StatusChoices = [
        ('Pending', 'Pending'),
        ('Open', 'Open'),
        ('Complete', 'Complete'),
        ('Deferred', 'Deferred'),
        ('Awaiting Response', 'Awaiting Response'),
    ]
    # Status of the Ticket 
    ticket_Status = models.CharField(
        max_length=50,
        choices=StatusChoices,
        default= 'Pending'
    )
    # Comments from HelpDesk Staff
    ticket_Comments = models.TextField(blank=True )

    #Shows when the ticket was last saved. 
    ticket_Last_Updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        """Return a string representation of the model"""
        return self.ticket_Name 

views.py:

    # Imports Models from the app
    from  . models import *
    # Imports from the Forms List
    from . forms import TicketForm
    
    # Create your views here.
    
    # View of all active tickets
    def ticket(request):
        tickets = Ticket.objects.all().order_by('-ticket_Submitted')
        context = {'ticket': tickets}
        return render(request, 'tickets/joblist.html', context)
    
    # User can view details about a Ticket
    
    def order(request, ticket_id):
        order = Ticket.objects.get(id=ticket_id)
        context= {'order': order}
        return render(request, 'tickets/tix.html', context)

urls.py

from django.urls import path,include
from . import views


app_name='tickets'

urlpatterns = [

    # Include default auth urls.
    path('', include('django.contrib.auth.urls')),
    # Support Ticket Form 
    path('submit/', views.submit, name='submit'),
    # Contact Us Form
    path('contact/', views.contact, name='contact'),
    # TicketWeblist
    path('tasks/', views.ticket, name='tasks'),
    # Ticket Details
    path('order/<str:ticket_id>/', views.order, name='order' )
   
] 

Шаблон (список заданий. html):

{% for tickets in ticket %}
<tr>
    <td>{{tickets.ticket_Name}}</td>
    <td>{{tickets.ticket_Type}}</td>
    <td>{{tickets.ticket_Contact}}</td>
    <td>{{tickets.ticket_Status}}</td>
    <td>{{tickets.ticket_Submitted}}</td>
    <td>{{tickets.ticket_Last_Updated}}</td>
    <td><a class="btn btn-sm btn-info" href="{% url 'tickets:order' ticket.id %}">View</a>
</tr>

{% endfor %}

   

После просмотра кода дюжину раз, все, в чем я могу быть уверен, - это проблема, которая начинается с тега url шаблона привязки шаблона. (Просмотр), но независимо от того, какой формат я пробую, он вызывает эту или аналогичную ошибку.

ОБНОВЛЕНИЕ: по предложению Мела изменил URL-адрес «порядок» на «билеты: заказ», и теперь я получаю следующее сообщение :

NoReverseMatch в / ticket / tasks / Обратный для 'порядка' с аргументами '(' ',)' не найден. 1 образец (ы) пробовали: ['билеты / заказ / (? P [^ /] +) / $ ']

Я пытался решить эту проблему около трех дней и был полон решимости решить ее сам. Любая помощь приветствуется, и, пожалуйста, не стесняйтесь указывать на любой спагетти-код или отсутствие заметок, а также я ищу способы расти.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 06 августа 2020

Вы установили пространство имен для своих URL-адресов: app_name = 'tickets'

Таким образом, правильный обратный URL-адрес будет.

{% url 'tickets:order' tickets.id %}

Можете ли вы попробовать изменить функцию просмотра order на это -

def order(request, ticket_id):
    active_order = Ticket.objects.get(id=ticket_id)
    context= {'order': active_order}
    return render(request, 'tickets/tix.html', context)
0 голосов
/ 06 августа 2020

Я только что увидел, что вы передаете ticket.id из своего шаблона в представление, однако в коде нет ticket.id. Почему бы вам не попробовать передать значение, которое есть в шаблоне. Должно сработать.

0 голосов
/ 06 августа 2020

Вы создали отдельное приложение urls.py для своего приложения (оно похоже на него), поэтому обязательно включите namespace = tickets в файл urls.py вашего проекта. И затем в своем шаблоне вы должны сделать следующее:

{% url 'tickets:order' ticket.id %}

Другими словами, вам также необходимо указать имя приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...