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>
{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] 删除。
我来说两句