2011-06-27 91 views
0

我不確定如何說出這個,但在這裏。我有幾個觀點認爲我的urls.py似乎根本看不到,我不知道爲什麼。我對django很陌生,並承認對它的一些工作有些困惑。URL瀏覽和瀏覽DJANGO

在我的模板,我有:

<ul> 
    <li><a href="/project/{{project.slug}}/tickets/create">Create Ticket</a></li> 
    <li><a href="/project/{{ project.slug }}/tickets/edit">Edit Ticket</a></li> 
    <li><a href="/project/{{ project.slug }}/tickets/delete">Delete Ticket</a></li> 
</ul> 

在我的urls.py:

(r'^ticket/(?P<ticket_id>\d+)$', views.editTicket), 
(r'^(?P<project_slug>[^\.^/]+)/tickets/create$', views.createTicket), 
(r'^(?P<project_slug>[^\.^/]+)/tickets/(?P<ticket_id>\d+)$', views.deleteTicket), 

在我views.py:

def createTicket(request, project_slug): 
    project = Project.objects.get(slug=project_slug) 
    form = None 
    if request.method == 'POST': 
     t = Ticket(created_by=request.user, assigned_to=request.user) 
     form = TicketCreateForm(request.POST, instance=t) 
     if form.is_valid(): 
      comment = Comment(user=request.user, body=request.POST.get("description", ""), subject="") 
      comment.save() 
      t.description = comment 
      form.save() 
      return HttpResponseRedirect("/project/ticket/%d" % t.pk) 
    else: 
     form = TicketCreateForm(instance=Ticket(project=project, assigned_to=request.user)) 
    payload = { 'project':project, 'form':form } 
    return render(request, 'project/ticket_add.html', payload) 

def editTicket(request, ticket_id): 
    ticket = Ticket.objects.get(pk=ticket_id) 
    if request.method == 'POST': 
     form = TicketCreateForm(request.POST, instance=ticket) 
     if form.is_valid(): 
      form.setComment(Comment(parent=ticket.description, user=request.user, body=request.POST.get("comment", " "))) 
      form.save() 
    form = TicketCreateForm(instance=ticket) 
    payload = { 'project':ticket.project, 'ticket':ticket, 'ticket_form':form } 
    return render(request, 'project/ticket.html', payload) 

def deleteTicket(request, ticket_id): 
    ticket = Ticket.objects.get(pk=ticket_id) 
    ticket.delete() 
    redirect_to = 'project/tickets.html' 
    return HttpResponseRedirect(redirect_to) 

def editTicket(request, ticket_id): 
    ticket = Ticket.objects.get(pk=ticket_id) 
    if request.method == 'POST': 
     form = TicketCreateForm(request.POST, instance=ticket) 
     if form.is_valid(): 
      form.setComment(Comment(parent=ticket.description, user=request.user, body=request.POST.get("comment", " "))) 
      form.save() 
    form = TicketCreateForm(instance=ticket) 
    payload = { 'project':ticket.project, 'ticket':ticket, 'ticket_form':form } 
    return render(request, 'project/ticket.html', payload) 

我在做什麼錯在這裏?誰能幫忙?

+0

「我有幾個觀點認爲,我的urls.py似乎根本看不到」。你是什​​麼意思?你正在採取什麼行動,你會得到什麼樣的錯誤/意外行爲? –

+0

看起來非常接近我,我會在Django網站上查看教程(https://docs.djangoproject.com/zh/dev/intro/tutorial03/)。如果您發佈了特定的錯誤消息,那可能會有幫助。我認爲你很接近。此外,freenode上的django irc頻道確實非常棒。 –

+0

醫生,謝謝。不幸的是,我沒有收到任何錯誤。相反,我在事情應該發生的時候會遇到很多「沒有」的事情。 – DesiredDesigns

回答

1

有幾個問題在這裏,

首先,除非你已經修改了相關設置,最好是添加/到您的網址年代末以來,特別是要包括在你的URL正則表達式$,和django可能會重定向到您的地址添加最後一個斜槓。

其次,您的deleteTicket功能,以requestticket_id爲參數,而根據您的正則表達式需要3,project_slug丟失。

3rd,<a href="/project/{{ project.slug }}/tickets/delete">Delete Ticket</a>根本不符合(r'^(?P<project_slug>[^\.^/]+)/tickets/(?P<ticket_id>\d+)$', views.deleteTicket),,因爲沒有符號ticket_id

4th(與匹配問題無關),您正在通過HTTP GET請求刪除一個對象,這可能不是一個好主意(例如,它可能被緩存或搜索引擎可能會嘗試點擊它)。另外撥打Ticket.objects.get(pk=ticket_id)可能會引發異常,請嘗試get_object_or_404(Ticket, pk=ticket_id),這更有可能做到您想要的。它在from django.shortcuts import get_object_or_404

如果這樣做不成功,請嘗試查看模板中顯示的HTML源代碼(使用替代值{{project.slug}}),以便進一步執行檢查。

希望這可以幫助你。

+0

謝謝Darioush ...我試圖故意拋出一個錯誤,所以我可以嘗試找出發生了什麼...這是發生了什麼......我點擊了一個鏈接,但應該調用「刪除視圖」 ,而不是我從一個視圖中得到一個錯誤,我甚至沒有試圖與...我很困惑,爲什麼會發生這種情況? – DesiredDesigns

+0

您需要遵守第1條和第3條建議。如果您已經這樣做了,那麼錯誤是什麼? – Darioush

+0

DoesNotExist at/project/test-project1/tickets/delete 來自評論。進口車型從評論.models 導入* 從者,恕不導入* 從頁面導入* 從svnrepos導入* 高清showProject(請求,project_slug): \t項目= Project.objects.get(蛞蝓= project_slug) ... \t車票= Ticket.objects.filter(項目=項目) \t有效載荷= { '項目':項目, '票':票} \t返回渲染(請求, '項目/ project.html',有效載荷) DEF editProject(請求,project_slug): 項目= Project.objects.get(蛞蝓= project_slug) – DesiredDesigns