所以我正在建立一个相当简单的网站,允许用户创建和编辑个人资料。我正在为网站创建网址,其中包含以下“规则”:
Tray
应该重定向到家。In [94]: class Tray(object):
....: @property
....: def trayData(self):
....: return (1,2,3,4)
....:
In [95]: t=Tray()
In [96]: t.trayData
Out[96]: (1, 2, 3, 4)
应重定向到www.website.com
的个人资料。www.website.com/profile/person
应重定向到person
的个人资料,因为该网址应在www.website.com/profile/person/extra/useless/info
之后“修剪”。person
应重定向回profile/person/
,然后重定向到主页。到目前为止我的代码如下。
www.website.com/profile
第2部分:
www.website.com
使用此代码,当用户输入# my_site/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^$', include('my_app.urls')),
url(r'^profile/', include('my_app.urls')),
url(r'^admin/', include(admin.site.urls)),
]
时,用户 被重定向到主页,但地址栏仍然显示# my_app/urls.py
from django.conf.urls import url
from django.http import HttpResponse
from . import views
urlpatterns = [
url(r'^(?P<username>[\w-]*)/$', views.profile, name='profile'),
url(r'^(?P<username>[^\w-])/$', views.profile, name='profile'), # still link to the profile
url(r'^$', views.home, name="home"),
]
,我不想要。我想要它阅读www.mysite.com/profile
。此外,我没有遵守上面给出的规则列表中的第3条规则。我想有一个URL“清理”功能,它修剪了URL的不需要的部分,但我不知道如何做到这一点。任何帮助将不胜感激。
非常感谢。
答案 0 :(得分:0)
要在浏览器中更改路径,您需要使用实际的http重定向,而不仅仅是Django网址匹配的后备。
# my_site/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^$', include('my_app.urls')),
url(r'^admin/', include(admin.site.urls)),
]
# my_app/urls.py
from django.conf.urls import url
from django.views.generic import RedirectView
from . import views
urlpatterns = [
url(r'^profile/(?P<username>[^/]+)/$', views.profile, name='profile'),
url(r'^profile/(?P<username>[^/]+)/(.*)?', RedirectView.as_view(pattern_name='profile')),
url(r'^profile/$', RedirectView.as_view(pattern_name='home')),
url(r'^$', views.profile, name="home"),
]
解释:
^profile/(?P<username>[^/]+)/$
匹配mysite.com/profile/my-user-name/
,最后没有垃圾'^profile/(?P<username>[^/]+)/(.*)?'
在最后匹配垃圾邮件的情况(在有效的用户名和/
之后)...你想要在查找垃圾邮件之前要求斜杠,否则如果你有两个用户{{ 1}}和john
您始终会在网址中将johnsmith
与johnsmith
用户匹配(将john
视为额外垃圾)。然后,我们进行真正的http重定向到规范配置文件URL smith
仅匹配'^profile/$'
并进行真正的http重定向到主页有关重定向的详情,请参阅:https://stackoverflow.com/a/15706497/202168
当然也是文档:
https://docs.djangoproject.com/en/1.8/ref/class-based-views/base/#redirectview
https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#redirect