Django重复URL
刚到Django。设置wiki。当我需要它时,请转到下一页添加内容,它会复制URL,因此我们从这里开始:Django重复URL,django,django-urls,Django,Django Urls,刚到Django。设置wiki。当我需要它时,请转到下一页添加内容,它会复制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 这显然是不存在的。
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
这显然是不存在的。
下面是url.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')
这是创建页面的模板:
<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,并在views.py和其他脚本中使用反向'name'获取相应的url:
url.py
在views.py或models.py等其他脚本中使用
reverse('view', args=('value',))
通过这种方式,您可以修复错误,有朝一日如果您想修改URL,只需修改URL.py即可
2014年5月31日更新
在高级中,您可以在models.py的类中定义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}
更多信息请参见:
关于重定向:它只是附加路径。你能说明一下用法吗?url是如何创建的?在模板中的url之前可能需要一个前导斜杠。我添加了views.py,我相信它应该显示用法。我还是不明白为什么要加上它。我确实尝试过在模板文件中添加前导斜杠,没有骰子。谢谢您的关注。问题不在视图中。它应该位于调用编辑URL的视图中。还有一个建议,使用reverse,而不是/mideastinfo/+page_name+//Show your template@bamabacho由于某种原因,我在该行末尾添加name='edit'时出现语法错误。不管怎样,修复了它!这似乎是正确的解决方案。非常感谢!好的,我更新了我的答案,你可以使用重定向OBJ,事情会更容易。
{% url 'edit' 'page_name' %}
reverse('view', args=('value',))
from django.shortcuts import redirect
def view2(request):
obj = Model2.objects.get(id=33)
return redirect(obj,permanent=True)