0

J'essaie d'afficher un profil d'utilisateur pour mon site Web avec le détail CBV. Voici le code de views.py, urls.py, models.py et profile.html.Essayer d'afficher le profil utilisateur dans Django, mais la page est introuvable lors de la recherche d'URL

Un utilisateur existe avec le nom d'utilisateur "brian_weber", mais pour une raison quelconque, lorsque je navigue vers ce lien: http://0.0.0.0:8000/accounts/profile/brian_weber la page est introuvable. Mon application s'appelle "comptes".

Si quelqu'un pouvait me diriger dans la bonne direction pour obtenir la vue de l'url, ce serait grandement apprécié! J'ai cherché autour de Stack Overflow, mais rien n'a fonctionné que j'ai essayé.

Merci à l'avance,

Brian

views.py

from django.shortcuts import render 
from django.shortcuts import get_object_or_404 
from django.contrib.auth import login, logout, authenticate 
from django.http import HttpResponseRedirect 
from django.contrib.auth.forms import AuthenticationForm 
from django.core.urlresolvers import reverse, reverse_lazy 
from django.views import generic 
from braces.views import LoginRequiredMixin 
from django.contrib.messages.views import SuccessMessageMixin 

from . import forms 
from . import models 


class LoginView(generic.FormView): 
    form_class = AuthenticationForm 
    success_url = reverse_lazy('home') 
    template_name = "accounts/login.html" 

    def get_form(self, form_class=None): 
     if form_class is None: 
      form_class = self.get_form_class() 
     return form_class(self.request, **self.get_form_kwargs()) 

    def form_valid(self, form): 
     login(self.request, form.get_user()) 
     return super().form_valid(form) 


def logout_view(request): 
    logout(request) 
    return HttpResponseRedirect(reverse('home')) 


class SignUp(SuccessMessageMixin, generic.CreateView): 
    form_class = forms.UserCreateForm 
    success_url = reverse_lazy("login") 
    template_name = "accounts/signup.html" 
    success_message = "Your profile has been successfully created. Please log into your account." 


class UserProfile(LoginRequiredMixin, generic.DetailView): 
    model = models.UserProfile 
    template_name = "profile.html" 


class UserProfileUpdate(LoginRequiredMixin, generic.UpdateView): 
    model = models.UserProfile 

urls.py

from django.conf.urls import url 

from . import views 

urlpatterns = [ 
    url(r'^logout/$', views.logout_view, name="logout"), 
    url(r'^signup/$', views.SignUp.as_view(), name="signup"), 
    url(r'^profile/(?P<username>[a-zA-Z0-9]+)$', 
     views.UserProfile.as_view(), 
     name="profile"), 
    url(r'^profile/update/(?P<username>[a-zA-Z0-9]+)$', 
     views.UserProfileUpdate.as_view(), 
     name="update_profile"), 
] 

models.py

class UserProfile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 
    company = models.CharField(max_length=40, null=True) 
    position = models.CharField(max_length=40, null=True) 
    bio = models.CharField(max_length=140, blank=True, default="") 
    avatar = models.ImageField(blank=True, null=True, upload_to="avatars", 
           height_field=None, width_field=None) 


def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     UserProfile.objects.create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

Répondre

2

Votre erreur est très faible, l'expression régulière fourni dans l'URL pour le profil, (?P<username>[a-zA-Z0-9]+) ne correspond pas brian_weber à cause de la _.

Vous pouvez également mettre à jour la regex pour qu'elle corresponde également à _.

username_regex = r'[a-zA-Z0-9_]+' 

urlpatterns = [ 
    url(r'^logout/$', views.logout_view, name="logout"), 
    url(r'^signup/$', views.SignUp.as_view(), name="signup"), 
    url(r'^profile/(?P<username>{username})$'.format(username=username_regex), 
     views.UserProfile.as_view(), 
     name="profile"), 
    url(r'^profile/update/(?P<username>{username})$'.format(username=username_regex), 
     views.UserProfileUpdate.as_view(), 
     name="update_profile"), 
] 
+0

@ e4c5 Vous avez 17k réputation, une réponse moins ne vous blessera pas :-D –

+0

@ e4c5 Merci de –

+0

Merci MJafar! Maintenant, j'ai une autre erreur, cette fois c'est un ValueError. L'erreur est littérale invalide pour int() avec base 10: 'brian_weber'. Dois-je redéfinir la méthode get_object? Si oui, à quoi ressemblerait le code? – Brian