2012-09-13 19 views
-1

我有博客系統,這是每個用戶都有自己的主頁像;django - 如何到達用戶名在url

127.0.0.1/username

,每個用戶的登錄屏幕位於:127.0.0.1/username/panel

,並再次這裏是他們的管理面板:127.0.0.1/username/admin

登錄頁面;當我提交時;它必須將用戶重定向到管理面板。

但我需要到達目前在URL中的用戶名。我想我應該使用正則表達式。但是如何?我對regexp不好。

這裏是我的urls.py:

urlpatterns = patterns('blog.views', 
    url(r'^blog/(?P<username>[-\w]+)/$',view='index', name='index'), 
    url(r'^blog/(?P<username>[-\w]+)/post/(?P<postslug>[-\w]+)',view='singlePost', name='view_blog_post'), 
    url(r'^blog/(?P<username>[-\w]+)/panel/$', view='loguserin'), 
    url(r'^blog/(?P<username>[-\w]+)/admin/$', view='adminView', name='admin'), 
    url(r'^blog/(?P<username>[-\w]+)/admin/loggedout/$', view='logout', name='logout'), 
    url(r'^blog/(?P<username>[-\w]+)/admin/addpost/$', view='addpost',name='addpost'), 
    url(r'^blog/(?P<username>[-\w]+)/admin/editpost/(?P<post_id>\d+)', view='editPost', name='editpost'), 
    url(r'^blog/(?P<username>[-\w]+)/admin/delete/(?P<post_id>\d+)', view='delete_post', name='deletePost'), 

) 

,這裏是我的views.py [登錄部分]:

def loguserin(request,username): 
    if request.method=='POST': 
     uname = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=uname, password=password) 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      if user is not None: 
       request.session['loggedin']="djangoo" 
       login(request, user) 
       return HttpResponseRedirect('/admin/') #--> ???? 
    else: 
     form = LoginForm() 

    return render_to_response('login.html',{'form':form,},context_instance=RequestContext(request)) 
+0

你在哪裏試圖訪問用戶名?當我運行此代碼時,您已經擁有用戶名作爲查看方法 – karthikr

+0

的參數;在提交後重定向到127.0.0.1/admin。 HttpResponseRedirect的bcs。但我需要去127.0.0.1/username/admin – alix

+1

你不能做HTTPResponseRedirect('/%s/admin /'%(username))?你的視圖 – karthikr

回答

3

其實,你已經擁有了用戶名:

from django.core.urlresolvers import reverse 
return HttpResponseRedirect(reverse('admin', args=[uname])) 
+0

karthikr的答案工作。這會產生反向匹配錯誤。但謝謝:) – alix

+0

np。我建議你使用'reverse'。有了這個,你可以更改網址,而不會更少的痛苦:) https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse – anhtran

+0

它的工作原理。:)剛剛嘗試:) – alix

1

您需要的是帶參數的reverse

from django.core.urlresolvers import reverse 

def loguserin(request,username): 
    if request.method=='POST': 
     uname = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=uname, password=password) 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      if user is not None: 
       request.session['loggedin']="djangoo" 
       login(request, user) 
       return HttpResponseRedirect(reverse('admin', args=[uname])) #--> ???? 
    else: 
     form = LoginForm() 

    return render_to_response('login.html',{'form':form,},context_instance=RequestContext(request)) 
+0

它的工作。現在我有一個會話問題。但我認爲這與此有關。當我註銷並重試登錄時;它給出了關鍵錯誤(我的看漲值) – alix

+0

更新你的問題並顯示錯誤 –

+0

@drTerminal確保你在註銷時刪除會話:'del request.session ['loggedin']' –

相關問題