在django中的基本URL后面的url中添加用户名

时间:2016-08-11 06:04:46

标签: python django

我正在研究django项目(即将完成),我的结构如下: 项目名称:Mysite 应用名称:myapp

项目网址:127.0.0.1/myapp/blog等

我的要求是从网站中排除我的应用(通过输出)并在个人资料页面中添加用户名,如:

  • 127.0.0.1/blog
  • 127.0.0.1/products
  • 127.0.0.1/search

和个人资料页面: 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'),
]

2 个答案:

答案 0 :(得分:1)

您可以将kwargs dict传递给reversereverse_lazy函数,以便将其与您的网址格式进行映射。

reverse_lazy('myapp:profile', kwargs={'username': username})

在你的模板中,只需将其作为位置参数传递

<a href="{% url 'myapp:profile' username %}">

答案 1 :(得分:1)

您的基本网址根本不需要提及myapp,只需将包含myapp的网址设为r'^'即可。您仍然可以将网址和所有内容命名为以前的名称。