0

我正在嘗試使用Detail CBV查看我的網站的用戶配置文件。以下是views.py,urls.py,models.py和profile.html的代碼。嘗試在Django中查看用戶配置文件,但在搜索URL時未找到頁面

用戶以用戶名「brian_weber」存在,但由於某種原因導航到此鏈接時:http://0.0.0.0:8000/accounts/profile/brian_weber未找到該頁面。我的應用程序被稱爲「帳戶」。

如果有人能指出我在正確的方向,讓視圖顯示與網址,這將不勝感激!我已經搜索了堆棧溢出,但沒有任何工作,我試過。

由於提前,

布賴恩

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) 

回答

2

你的錯誤是非常小的,在網址爲配置文件提供的正則表達式,(?P<username>[a-zA-Z0-9]+)不會因爲_匹配brian_weber

您也可以簡單地更新正則表達式以匹配_

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你有17K的聲譽,少了一個答案不會傷害你:-D –

+0

@ e4c5感謝;-) –

+0

感謝MJafar!現在我有另一個錯誤,這次是一個ValueError。對於基數爲10的int(),錯誤是無效的:'brian_weber'。我是否必須重新定義get_object方法?如果是這樣,代碼將是什麼樣子? – Brian

相關問題