2012-05-05 1 views
0

Je crée une petite application Django avec les utilisateurs et j'ai créé mon propre modèle UserProfile .. Mais j'ai quelques problèmes avec mes urls (au moins I pense). Je pense que les expressions régulières que j'ai utilisées sont fausses. Check it out:Django Url erreur: littéral invalide pour int() avec base 10: 'tony'

l'erreur que je reçois:

ValueError at /usr/tony/ 

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

Mon URL:

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

Mon point de vue:

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) 

ici est mon modèle:

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

Répondre

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

Il semble que vous recherchiez l'attribut username de l'utilisateur. Les clés étrangères sont réparties dans django par double underscore.

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

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

également .get() jetteront une exception DoesNotExist il est conseillé d'envelopper la requête dans essai: sauf le bloc afin qu'il ne 500 sur l'utilisateur. 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

merci beaucoup! Problèmes débutants :) –

1

Pour un code plus propre, utilisez get_object_or 404 à la place:

from django.shortcuts import get_object_or_404 

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

Aussi, pour plus de clarté, je vous recommande de ne pas donner vos points de vue et les classes les mêmes noms. J'appellerais cette fonction quelque chose comme profile_detail à la place. Mais c'est juste un détail d'entretien ménager.

Questions connexes