2011-06-27 51 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