簡體   English   中英

Django 3.0.8 URL/模板/路由問題“無反向匹配”

[英]Django 3.0.8 URL/Template/Routing Troubles “No reverse match”

第一篇文章所以請原諒我的無知,因為這是我的第一個 django 應用程序。

我正在嘗試創建一個模板,該模板顯示所有打開票證列表中有關特定“票證”的所有信息。

不幸的是,每當我嘗試使用模板 url 標簽添加錨點時,我都會收到以下消息:

NoReverseMatch 在 /tickets/tasks/ 反向為 'order' 與 arguments '('',)' 未找到。 嘗試了 1 種模式:['tickets/order/(?P<ticket_id>[^/]+)/$']

錯誤消息已更新。 請參閱下面的更新。

而且它只在這個 HTML 模板上。

以下是我認為能夠闡明問題的所有代碼:

模型.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 

視圖.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)

網址.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' )
   
] 

模板(joblist.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 在 /tickets/tasks/ 反向為 'order' 與 arguments '('',)' 未找到。 嘗試了 1 種模式:['tickets/order/(?P<ticket_id>[^/]+)/$']

我已經嘗試解決這個問題大約三天,並決心自己解決。 感謝任何類型的幫助,請隨時指出任何意大利面條代碼或缺少注釋,以及我正在尋找成長的方法。

謝謝!

您已經為您的應用程序創建了一個單獨的urls.py (看起來很像),因此請確保在您的項目urls.py文件中包含namespace = tickets 然后在您的模板中,您應該執行以下操作:

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

換句話說,您還需要包含應用程序的名稱。

你已經為你的 url 設置了一個命名空間: app_name = 'tickets'

所以正確的反向 url 將是。

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

您可以嘗試將您的order視圖 function 更改為此 -

def order(request, ticket_id):
    active_order = Ticket.objects.get(id=ticket_id)
    context= {'order': active_order}
    return render(request, 'tickets/tix.html', context)

我剛剛看到您正在將ticket.id 從模板傳遞到視圖,但是代碼中的任何地方都沒有ticket.id。 為什么不嘗試傳遞模板中的值。 它應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM