0

ユーザーと一緒に小さなDjangoアプリを作成していて、独自のUserProfileモデルを作成しました。しかし、URLにいくつか問題があります(少なくとも私は思います)。私が使った正規表現は間違っていると思います。見てみな:

私が得るエラー:

ValueError at /usr/tony/

invalid literal for int() with base 10: 'tony'

私のURL:

url(r'^usr/(?P<username>\w+)/$', 'photocomp.apps.users.views.Userprofile'),

私の見解:

from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.contrib import auth
from django.http import HttpResponseRedirect
from photocomp.apps.users.models import UserProfile

def Userprofile(request, username):
    rc = context_instance=RequestContext(request)
    u = UserProfile.objects.get(user=username)
    return render_to_response("users/UserProfile.html",{'user':u},rc)

これが私のモデルです:

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    first_name = models.CharField(max_length="30", blank=True)
    last_name = models.CharField(max_length="30", blank=True)
    email = models.EmailField(blank=True)
    country = models.CharField(blank=True,max_length="30")
    date_of_birth = models.DateField(null=True)
    avatar = models.ImageField(null=True, upload_to="/avatar")
4

2 に答える 2

3
u = UserProfile.objects.get(user__username=username)

userのusername属性を検索しているようです。外部キーは、djangoでは二重アンダースコアで区切られています。

https://docs.djangoproject.com/en/dev/topics/auth/

https://docs.djangoproject.com/en/dev/topics/db/queries/

また.get()、例外をスローしDoesNotExistます。クエリをtry:exceptブロックでラップして、ユーザーが500にならないようにすることをお勧めします。 https://docs.djangoproject.com/en/1.2/ref/exceptions/#objectdoesnotexist-and-doesnotexist

def Userprofile(request, username):
    rc = context_instance=RequestContext(request)
    try:
      u = UserProfile.objects.get(user__username=username)
    except UserProfile.DoesNotExist:
      # maybe render an error page?? or an error message at least to the user
      # that the account doesn't exist for that username?
    return render_to_response("users/UserProfile.html",{'user':u},rc)
于 2012-05-05T16:10:26.263 に答える
1

よりクリーンなコードの場合は、代わりにget_object_or404を使用してください。

from django.shortcuts import get_object_or_404

def Userprofile(request):
    u = get_object_or_404(UserProfile, pk=1)

また、わかりやすくするために、ビューとクラスに同じ名前を付けないことをお勧めします。代わりに、この関数を次のように呼び出しますprofile_detail。しかし、それは単なるハウスキーピングの詳細です。

于 2012-05-05T17:32:44.417 に答える