DJANGO中的URL和视图

DJANGO中的URL和视图,django,django-templates,django-views,Django,Django Templates,Django Views,我不知道该怎么称呼这个词,但还是这样。我有几个视图,我的urls.py似乎根本无法访问,我不知道为什么。我是django的新手,我承认对它的一些工作原理有点困惑 在我的模板中,我有: <ul> <li><a href="/project/{{project.slug}}/tickets/create">Create Ticket</a></li> <li><a href="/project/{{ pro

我不知道该怎么称呼这个词,但还是这样。我有几个视图,我的urls.py似乎根本无法访问,我不知道为什么。我是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>

我做错了什么?有人能帮忙吗?

这里有几个问题

首先,除非您修改了相关设置,否则最好在url的末尾添加一个/,特别是因为您的url regexp中包含了$,django可能会重定向以向您的地址添加最后一个斜杠

其次,您的
deleteTicket
函数将
request
ticket\u id
作为参数,而根据您的regexp,它需要3,缺少
project\u slug

第三,
根本不匹配
(r'^(?p[^\.^/]+)/tickets/(?p\d+$),views.deleteTicket),
,因为没有
ticket\u id
的迹象

第四点(与匹配问题无关),您正在通过HTTP GET请求删除对象,这可能不是一个好主意(例如,它可能被缓存,或者搜索引擎可能试图命中它)。同时调用
Ticket.objects.get(pk=Ticket\u id)
可能会引发异常,请尝试
get\u object\u或\u 404(Ticket,pk=Ticket\u id)
,这更可能实现您想要的功能。它位于django的
中。快捷方式导入获取对象或404

如果这不起作用,请尝试查看模板中显示的HTML源代码(放置值而不是
{{project.slug}
),以便进行进一步检查


希望这对您有所帮助。

“我有几个视图,我的url.py似乎根本无法访问”。你是什么意思?你正在采取什么行动,以及你会出现什么错误/意外行为?看起来很接近我,我会回顾Django网站上的教程()。如果您发布了特定的错误消息,这可能会有所帮助。不过我觉得你很接近。另外,freenode上的django irc频道也非常好。博士,谢谢。不幸的是,我没有收到任何错误。保罗,我没有犯任何错误——这是问题的一部分,因为这不会让我去任何地方寻找错误。发生的事情是,当我运行这个,点击一个链接,应该会带来一个特定的看法,它没有。页面基本上是重新加载自己,不做任何事情。我没有收到任何与URL或代码相关的错误。谢谢Darioush。。。我尝试了一些有目的地抛出错误的东西,这样我就可以试着找出到底发生了什么。。。下面是发生的事情。。。我点击了一个应该调用“删除视图”的链接,然而,我却从一个我甚至没有尝试使用的视图中得到了一个错误。。。我不明白为什么会发生这种情况?你需要遵守第一条和第三条建议。如果您已经这样做了,那么错误是什么?DoesNotExist位于/project/test-project1/tickets/delete from comment.models导入comment from.models导入*from.forms导入*from pages导入*from svnrepos导入*def showProject(请求,project\u slug):project=project.objects.get(slug=project\u slug) ... tickets=Ticket.objects.filter(project=project)payload={'project':project,'tickets':tickets}返回render(request,'project/project.html',payload)def editProject(request,project\u slug):project=project.objects.get(slug=project\u slug)作为第一个,你是说在url.py中的每个url末尾添加/吗?当我这样做的时候,我得到一个错误,那就是需要一个表达式。我可以用这些信息说,要么是因为您正在导入一个不存在的模块(可能是svnrepos?),要么是因为您没有将
deleteTicket
更改为
deleteTicket(请求、项目slug、票证id)
(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),
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)