Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django重复URL_Django_Django Urls - Fatal编程技术网

Django重复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 这显然是不存在的。

刚到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
这显然是不存在的。 下面是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)