2012-05-05 32 views
0

我创建一个Django应用程序与用户,我创建了我自己的UserProfile模型..但我有一些问题与我的网址(至少我认为)。我认为我使用的正则表达式是错误的。检查出来:Django的Url错误:无效的文字为int()与基地10:'托尼'

错误,我得到:

ValueError at /usr/tony/ 

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

我的网址:

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") 

回答

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

看起来您正在搜索用户的用户名属性。外键在django中由双下划线组成。

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

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

而且.get()将抛出一个异常DoesNotExist它是明智的包裹查询的尝试:除了块,使得它在用户没有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) 
+0

非常感谢!初学者问题:) –

1

更清洁的代码,使用get_object_or 404代替:

from django.shortcuts import get_object_or_404 

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

此外,为清楚起见,我建议不要给你的意见和类相同的名称。相反,我会调用这个函数,如profile_detail。但那只是一个家务细节。

相关问题