如何使用Django显示用户个人资料?

时间:2015-11-15 20:00:23

标签: python django django-templates django-views

我是django的新手,我目前正在尝试建立一个允许用户登录并查看其他用户个人资料的网站。到目前为止,我已设法让用户登录,但我无法确定如何查看其他人的个人资料。

每个配置文件都使用用户名为其个人资料创建网址。目前,如果我以一个用户身份登录并将URL更改为另一个用户配置文件URL,则它仍会显示当前用户配置文件。我想要类似于pinterest的东西,任何人无论是否登录都可以查看人物档案。

任何帮助将不胜感激!

查看

from django.http import HttpResponse
from django.shortcuts import render
from howdidu.forms import UserProfileForm
from howdidu.models import UserProfile
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404
from django.contrib.auth.models import User

def index(request):
    context_dict = {'boldmessage': "I am bold font from the context"}
    return render(request, 'howdidu/index.html', context_dict)

#user profile form
@login_required
def register_profile(request):
    profile = UserProfile.objects.get(user=request.user)
    if request.method == 'POST':
        form = UserProfileForm(request.POST, request.FILES, instance=profile)
        if form.is_valid():
            form.save()
            return index(request)
        else:
            print form.errors
    else:
        form = UserProfileForm()
    return render(request, 'howdidu/register_profile.html', {'form': form})

#profile page using user name as url
@login_required
def profile_page(request, username):
    user = get_object_or_404(User, username=username)
    return render(request, 'howdidu/profile.html', {'profile_user': user})

项目网址

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from registration.backends.simple.views import RegistrationView

class MyRegistrationView(RegistrationView):  #redirects to home page after registration
    def get_success_url(self,request, user):
        return '/register_profile'

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'howdidu_project.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('howdidu.urls')),
    url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), #redirects to home page after registration
    (r'^accounts/', include('registration.backends.simple.urls')),
    url(r'^(?P<username>\w+)/', include('howdidu.urls')), #do i need this?
)

# media
if settings.DEBUG:
    urlpatterns += patterns(
        'django.views.static',
        (r'^media/(?P<path>.*)',
        'serve',
        {'document_root': settings.MEDIA_ROOT}), )

app url

from django.conf.urls import patterns, url
from howdidu import views

urlpatterns = patterns('',
        url(r'^$', views.index, name='index'),
        url(r'^register_profile/$', views.register_profile, name='register_profile'),
        url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),
        )

模板

{% extends 'howdidu/base.html' %}

{% load staticfiles %}

{% block title %}{{ user.username }}{% endblock %}

{% block body_block %}
        {% if user.is_authenticated %}
        <h1>{{ user.username }} welcome to your profile page</h1>
        <img src="{{ user.userprofile.profile_picture.url }}" width = "150" height = "150"  />
        <h2>{{ user.userprofile.first_name }}</h2>
        <h2>{{ user.userprofile.second_name }}</h2>
        <h2>{{ user.userprofile.user_country }}</h2>
        {% endif %}

{% endblock %}

1 个答案:

答案 0 :(得分:8)

  1. 在配置文件夹project_name/urls.py中注册您应用的网址: 例如:
  2. from django.conf.urls import include, url
    from django.contrib import admin
    from django.conf import settings 
    
    urlpatterns = [
        url(r'^user/', include('<app_name>.urls')),
        url(r'^admin/', include(admin.site.urls)),
    ]
    
    1. <app_name>/urls.py中添加新路线。 例如:
    2. 来自。导入视图

      urlpatterns = [
          url(r'profile/(?P<username>[a-zA-Z0-9]+)$', views.get_user_profile),
      ]
      
      1. <app_name>/views.py中添加一个带username(用户的用户名)的视图,以检索其信息并将其发送到模板中 例如:
      2. from django.shortcuts import render
        
        def get_user_profile(request, username):
            user = User.objects.get(username=username)
            return render(request, '<app_name>/user_profile.html', {"user":user})
        
        1. <app_name>/templates/<app_name>/user_profile.html中创建模板文件以显示user对象:
        2. {{ user.username }} 
          {{ user.email }}
          {{ user.first_name }} 
          {{ user.last_name }} 
          

          <app_name>替换为您应用的名称,它应该是好的。