如何使用 Django 显示用户配置文件? [英] How can I display a user profile using Django?

查看:21
本文介绍了如何使用 Django 显示用户配置文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am new to django and I am currently trying to build a website that allows users to sign in and view other users profiles. So far I have managed to let users sign in but I can't work out how to view other peoples profiles.

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

Each profile uses the users username to create a url for their profile. Currently if I sign in as one user and change the URL to another users profile URL, it still displays the current users profile. I want something similar to pinterest where any person whether they are signed in or not can view peoples profiles.

任何帮助将不胜感激!

查看

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}), )

应用网址

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. 在配置文件夹 project_name/urls.py 中注册您的应用程序的 url:例如:
  1. Register urls of your app in the configuration folder project_name/urls.py : E.g :

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. 在您的 /urls.py 中添加新路由.例如:
  1. Add a new route in your <app_name>/urls.py. E.g :

来自.导入视图

urlpatterns = [
    url(r'profile/(?P<username>[a-zA-Z0-9]+)$', views.get_user_profile),
]

  1. <app_name>/views.py 中添加一个视图,该视图采用 username(用户的用户名)来检索其信息并将它们发送到模板中例如:
  1. Add a view in <app_name>/views.py that take username (username of the user) to retrieve its information and send them into a template E.g :

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. /templates//user_profile.html中创建一个模板文件来显示user对象:
  1. Create a template file in <app_name>/templates/<app_name>/user_profile.htmlto display user object :

{{ user.username }} 
{{ user.email }}
{{ user.first_name }} 
{{ user.last_name }} 

<app_name> 替换为您的应用程序名称,应该不错.

Replace <app_name> by the name of your app and it should be good.

这篇关于如何使用 Django 显示用户配置文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆