2016-08-05 4 views
3

私はDjangoのアプリケーションに取り組んでいますし、私は以下のようにアプリケーションのベースURLを持っている:djangoのベースURLを書き直して、ログイン名をapp nameの代わりにすべてのページのurlに追加するには?

127.0.0.1:8000はベースURLであると myblogは、アプリケーション名で、 ページは、ページ名です
127.0.0.1:8000/myblog/page 

。 だから私の要件は、自分のアプリケーションの内部コードを変更することなく、このような何かにURLを変更することです:

127.0.0.1:8000/username/page 

は基本的に私は、URLにユーザー名とアプリケーション名を変更したいです。 私はthisで与えられた解決策を試したので質問があります。しかしそれはあまり役に立たなかった。

+2

https://docs.djangoproject.com/ja/1.9/topics/http/urls/あなたのビューでURLパラメータを取得することができます。あなたはそこからそれを取ることができます。 – nightgaunt

答えて

9

あなたはurl正規表現引数にユーザー名を渡すとrequestクラスから要求ユーザを取得することができます。
ビュー:

def user_page(request, username): 
    try: 
     user = User.objects.get(username=username) 
    except User.DoesNotExists: 
     raise Http404 
    # or use shortcut get_object_or_404(User, username=username) 
    if request.user.username != user.username: 
     raise Http404 
    return render(request, 'templates/user_template', {'user':user}) 

のURL:

url(r'^(?<username>\w+)/page/$', views.user_page, name='user_page') 

注:usernameフィールドではない有効な選択肢、それならば一意ではなく、User.objects.get()から複数のユーザーを取得するとエラーが発生します。ユーザページの参照のために、pkフィールドの使用を改善する。

しかし、要求ユーザーのユーザーページを構築するための簡単な方法があります。キーワード引数なしでただ1つのURL、認証されたユーザのための応答データ:

ビュー:

def user_page(request): 
    user = None 
    if request.user.is_authenticated(): 
     user = User.objects.get(pk=request.user.pk) 
    return render(request, 'templates/user_template', {'user': user}) 

のURL:今

url(r'^page/$', views.user_page, name='user_page') 

ユーザーではない場合、それは要求ユーザまたはNoneに基づいてデータを返します認証されました

関連する問題