Django重复URL

巴马巴乔

Django的新手。设置维基。当我需要它时,转到下一页添加内容,它复制了URL,因此我们从这里开始:

http://127.0.0.1:8000/mideastinfo/Start

而我有一句好听的话:“没有内容,您想创建吗?它的意思是到这里去:

http://127.0.0.1:8000/mideastinfo/Start/edit

而是这样做:

http://127.0.0.1:8000/mideastinfo/Start/mideastinfo/Start/edit

显然不存在。以下是urls.py

# url(r'^admin/', include(admin.site.urls)),
                   (r'^mideastinfo/(?P<page_name>[^/]+)/edit/$', 'mideastinfo.wiki.views.edit_page'),
                   (r'^mideastinfo/(?P<page_name>[^/]+)+/save/$', 'mideastinfo.wiki.views.save_page'),
                   (r'^mideastinfo/(?P<page_name>[^/]+)/$', 'mideastinfo.wiki.views.view_page')

我究竟做错了什么?感谢您的事先帮助,我是菜鸟。

这是views.py:

# Create your views here.
from wiki.models import Page
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect

def view_page(request, page_name):
try:
    page = Page.objects.get(pk=page_name)
except Page.DoesNotExist:
    return render_to_response("create.html", {"page_name":page_name}
) 
content = page.content
return render_to_response("view.html", {"page_name":page_name, "content":content})

def edit_page(request, page_name):
try:
    page = Page.objects.get(pk=page_name)
    content = page.content
except Page.DoesNotExist:
    content = ""
return render_to_response("edit.html", {"page_name":page_name, "content":content}
)

def save_page(request, page_name):
content = request.POST["content"]
try:
    page = Page.objects.get(pk=page_name)
    page.content = content
except Page.DoesNotExist:
    page = Page(name=pahe_name, conent=content)
page.save()
return HttpResponseRedirect("/mideastinfo/" + page_name + "/")

这是创建页面的模板:

<html>
<head>
    <title>{{page_name}} = Create</title>
</head>
<body>
    <h1>{{page_name}}</h1>
    This page does not exist. <a href="/{{page_name}}/edit">Create?</a>
</body>
</html>

并针对编辑页面:

<html>
<head>
    <title>{{page_name}} - Editing</title>
</head>
<body>
    <h1>Editing {{page_name}}</h1>
    <form method="post" action="/{{page_name}}/save/">
        <textarea name="content" rows="20" cols="60">{{content}}</textarea>         <br/>
        <input type="submit" value="Save Page"/>
    </form>
</body>
</html>
WeizhongTu

{url 'name' param %}在模板中使用而不是硬代码url,并用于reverse('name')在views.py和其他脚本中获取相应的url:

urls.py

(r'^mideastinfo/(?P<page_name>[^/]+)/edit/$', 'mideastinfo.wiki.views.edit_page',name='edit'),
(r'^mideastinfo/(?P<page_name>[^/]+)+/save/$', 'mideastinfo.wiki.views.save_page',name = 'save'),
(r'^mideastinfo/(?P<page_name>[^/]+)/$', 'mideastinfo.wiki.views.view_page',name = 'view')

用于模板

{% url 'edit' 'page_name' %}

用于views.py或其他脚本(例如models.py)中

reverse('view', args=('value',))

这样,您就可以纠正错误,如果有一天要修改url,只需修改urls.py,仅此而已。

2014年5月31日更新

您可以在高级模型中定义get_absolute_url()model.py的一个或多个类。https://docs.djangoproject.com/zh-CN/dev/ref/models/instances/#get-absolute-url

然后,您可以更轻松地重定向。

views.py 等等

from django.shortcuts import redirect
def view2(request):
    obj = Model2.objects.get(id=33)
    return redirect(obj,permanent=True)

在模板中使用 {{ obj.get_absolute_url }}

更多信息,请参见:https : //docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls

关于重定向:https : //docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirect

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章