【发布时间】:2017-09-20 08:29:54
【问题描述】:
当与平面页面 reverse() 和 get_abolute_url() 一起使用时,返回不同的输出:
>>> about = FlatPage.objects.get(id=2)
>>>
>>> about
<FlatPage: /about-us/ -- About us page>
>>>
>>> about.url
>>> '/about-us/'
>>>
>>> about.get_absolute_url()
'/about-us/'
>>>
>>>
>>> reverse('django.contrib.flatpages.views.flatpage', args=[about.url])
'/%2Fabout-us/' ## from where %2F comes from ?
>>>
这是整个网站的urls.py:
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib .flatpages import urls as flatpage_urls
# from . import blog
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include(flatpage_urls)),
]
虽然,我可以访问http://127.0.0.1:8000/about-us/ 的关于页面。 %2F 来自哪里?
我期待这两种方法都应该返回相同的输出。这是怎么回事?
更新:
这里是flatpages/urls.py
from django.conf.urls import url
from django.contrib.flatpages import views
urlpatterns = [
url(r'^(?P<url>.*)$', views.flatpage, name='django.contrib.flatpages.views.flatpage'),
]
更新 2:
将 urls.py 更新为:
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
# url(r'', include(flatpage_urls)),
]
urlpatterns += [
url(r'^(?P<url>.*/)$', views.flatpage),
]
【问题讨论】:
-
这很奇怪。 %2F 是 '/' 的 url 编码。它在某处增加了一个额外的斜线。
-
您的
flatpage_urls中有什么内容? -
你有没有发现什么奇怪的东西?是默认的,我没改过
-
其实没有,什么都看不到。尝试将 URI 设置为
about-us并按照文档url(r'^(?P<url>.*/)$', ...),在 url 模式中添加斜杠reverse现在给你什么? -
仍然得到 %2F
标签: python django django-flatpages