我正在研究django项目(即将完成),我的结构如下: 项目名称:Mysite 应用名称:myapp
项目网址:127.0.0.1/myapp/blog等
我的要求是从网站中排除我的应用(通过输出)并在个人资料页面中添加用户名,如:
和个人资料页面: 127.0.0.1/simer123/myprofile
我从各种SO问题中获取并能够从我的网址中排除“myapp”部分。 并且还能够在特定页面的URL中包含“用户名”。 SO question1 SO question2这些问题确实有帮助,我找到了一种方法,可以在我的网址中加入用户名。
但是现在我再次陷入困境,因为在整个项目中我使用了以下内容:
return HttpResponseRedirect(reverse_lazy('myapp:myprofile'))
类似于模板部分:
<a href="{% url 'myapp:myprofile' %}">
我如何设法转换它们?
任何人都可以用一些例子解释这一点。
由于
更新 mysite文件夹中的urls.py文件如下所示:
urlpatterns = [
url(r'^autocomplete/', include('autocomplete_light.urls')),
url(r'^$', 'myapp.views.index'),
url(r'^', include('myapp.urls', namespace="myapp")),
url(r'^myapp/', include('myapp.urls', namespace="myapp")),
url(r'^admin/login', adminLogin),
#url(r'^static/(?P<path>.*)$', views.serve),
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
url(r'^(?P<username>\w+)/', include('myapp.urls', namespace="myapp")),
url(r'^(?P<username>\w+)/myapp/', include('myapp.urls', namespace="myapp")),
]
myapp文件夹中的urls.py包含以下网址:
urlpatterns = [
# ex: /myapp/
url(r'^autocomplete/', include('autocomplete_light.urls')),
url(r'^$', views.index, name='index'),
url(r'^about/$', views.about, name='user_about'),
url(r'^login/$', views.login, name='login'),
url(r'^newaccount/(?P<uid>.*)/$', views.newaccount, name='newaccount'),
url(r'^logout/$', views.logout, name='logout'),
url(r'^myprofile/$', views.profile, name='profile'),
]
答案 0 :(得分:1)
您可以将kwargs dict
传递给reverse
和reverse_lazy
函数,以便将其与您的网址格式进行映射。
reverse_lazy('myapp:profile', kwargs={'username': username})
在你的模板中,只需将其作为位置参数传递
<a href="{% url 'myapp:profile' username %}">
答案 1 :(得分:1)
您的基本网址根本不需要提及myapp
,只需将包含myapp
的网址设为r'^'
即可。您仍然可以将网址和所有内容命名为以前的名称。