Добавление страницы profile.html в мой проект

Я разместил раздел на своем веб-сайте, чтобы заполнить форму профиля пользователя, которая называется profile.html. На данный момент у меня есть этот файл models.py для отображения этой информации в моей панели администратора:

from django.db import models
from django.contrib.auth.models import User

def url(self,filename):
    ruta = "MultimediaData/Users/%s/%s"%(self.user.username,filename)
    return ruta

class userProfile(models.Model):    

    name = models.CharField(max_length=30, default='')  
    user = models.OneToOneField(User)
    photo = models.ImageField(upload_to=url)    
    email = models.EmailField(max_length=75)


    def __unicode__(self):
        return self.user.username

Я хочу включить возможность редактирования этой информации для каждого пользователя в их соответствующем профиле, таким образом, я могу проверить информацию профиля пользователя для каждого пользователя в моей панели администратора (localhost: 8000/admin), что является хорошей формой для создания соответствующего представления, и это URL?

На самом деле это мой urls.py (это не основной urls.py, это особый urls.py для моего приложения и не имеет URL-адреса для профиля)

from django.conf.urls import patterns, include, url


urlpatterns = patterns('',       

    url(r'^$','dracoin.apps.home.views.index' ,name='vista_principal'),
    url(r'^landing/$','dracoin.apps.home.views.landing' ,name='vista_aterrizaje'),
    url(r'^shop/page/(?P<pagina>.*)/$','dracoin.apps.home.views.shop' ,name='vista_tienda'),
    url(r'^card/(?P<id_tarj>.*)/$','dracoin.apps.home.views.singleCard',name='vista_single_card'),
    url(r'^contacto/$','dracoin.apps.home.views.contacto' ,name='vista_contacto'),
    url(r'^login/$','dracoin.apps.home.views.login_view',name='vista_login'),
    url(r'^logout/$','dracoin.apps.home.views.logout_view',name='vista_logout'),
    url(r'^registro/$','dracoin.apps.home.views.register_view',name='vista_registro'),

Это мои модели.py для профиля:

from django.db import models
from django.contrib.auth.models import User

def url(self,filename):
    ruta = "MultimediaData/Users/%s/%s"%(self.user.username,filename)
    return ruta

class userProfile(models.Model):    

    name = models.CharField(max_length=30, default='')  
    user = models.OneToOneField(User)
    photo = models.ImageField(upload_to=url)    
    email = models.EmailField(max_length=75)


    def __unicode__(self):
        return self.user.username

My views.py (отсутствует представление userProfile)

from django.shortcuts import render_to_response
from django.template import RequestContext
from dracoin.apps.synopticup.models import card
from dracoin.apps.home.forms import ContactForm,LoginForm,RegisterForm
from django.core.mail import EmailMultiAlternatives
from django.contrib.auth.models import User
from dracoin.settings import URL_LOGIN
from django.contrib.auth import login,logout,authenticate
from django.http import HttpResponseRedirect
from django.core.paginator import Paginator, EmptyPage, InvalidPage
from django.contrib.auth.decorators import login_required



def index(request):
    return render_to_response('home/index.html',context_instance=RequestContext(request))

@login_required(login_url=URL_LOGIN)
def landing(request):
    return render_to_response('home/landing.html',context_instance=RequestContext(request))

@login_required(login_url=URL_LOGIN)
def shop(request,pagina):
    lista_tarj = card.objects.filter(status=True)
    paginator = Paginator(lista_tarj,5)
    try:
        page = int(pagina)
    except:
        page = 1
    try:
        tarjetas = paginator.page(page)
    except (EmptyPage,InvalidPage):
        tarjetas = paginator.page(paginator.num_pages)
    ctx = {'tarjetas':tarjetas}
    return render_to_response('home/shop.html',ctx,context_instance=RequestContext(request))

@login_required(login_url=URL_LOGIN)
def singleCard(request,id_tarj):    
    tarj = card.objects.get(id=id_tarj) 
    ctx = {'card':tarj}
    return render_to_response('home/singleCard.html',ctx,context_instance=RequestContext(request))  

@login_required(login_url=URL_LOGIN)
def contacto(request):
    info_enviado = False # Define si se envio la informacion o no
    email = ""
    titulo = ""
    texto = ""
    if request.method == "POST":
        formulario = ContactForm(request.POST)
        if formulario.is_valid():
            info_enviado = True
            email = formulario.cleaned_data['Email']
            titulo = formulario.cleaned_data['Titulo']
            texto = formulario.cleaned_data['Texto']
            # Configuracion de enviado de correos vis hotmail
            to_supp = '[email protected]'
            html_content = "Informacion recibida<br><br><br>***Mensaje***<br><h3>%s<h3><br><br>%s<br><br>%s"%(titulo,email,texto)
            msg = EmailMultiAlternatives('Correo de Contacto',html_content,'[email protected]',[to_supp])
            msg.attach_alternative(html_content,'text/html') # Contenido definido como html
            msg.send()
    else:
        formulario = ContactForm()                      
    ctx = {'form':formulario,'email':email, 'titulo':titulo, 'texto':texto, 'info_enviado':info_enviado}
    return render_to_response('home/contacto.html',ctx,context_instance=RequestContext(request))

def login_view(request):
    mensaje = ""
    if request.user.is_authenticated():
        return HttpResponseRedirect('/')
    else:
        if request.method == "POST":
            form = LoginForm(request.POST)
            if form.is_valid():
                next = request.POST['next']             
                username = form.cleaned_data['username']
                password = form.cleaned_data['password']
                usuario = authenticate(username=username,password=password)
                if usuario is not None and usuario.is_active:
                    login(request,usuario)
                    return HttpResponseRedirect(next)
                else:
                    mensaje = "user or password aren't correct"
        next = request.REQUEST.get('next')      
        form = LoginForm()
        ctx = {'form':form,'mensaje':mensaje,'next':next}
        return render_to_response('home/login.html',ctx,context_instance=RequestContext(request))

def logout_view(request):
    logout(request)
    return HttpResponseRedirect('/')

def register_view(request):
    form = RegisterForm()
    if request.method == "POST":
        form = RegisterForm(request.POST)
        if form.is_valid():
            first_name = form.cleaned_data['first_name']            
            usuario = form.cleaned_data['username']
            email = form.cleaned_data['email']
            password_one = form.cleaned_data['password_one']
            password_two = form.cleaned_data['password_two']

            u = User.objects.create_user(first_name=first_name,username=usuario,email=email,password=password_one)
            u.save()
            return render_to_response('home/thanks_register.html',context_instance=RequestContext(request))
        else:
            ctx = {'form':form}
            return render_to_response('home/register.html',ctx,context_instance=RequestContext(request))
    ctx = {'form':form}
    return render_to_response('home/register.html',ctx,context_instance=RequestContext(request))

Спасибо!!


def edit_profile(request):
    user = request.user
    user_profile = user.userprofile

    if request.method == 'POST':
        user_profile_form = userProfile(request-POST)
        if user_profile_form.is_valid():
            update user profile
    else:
        user_profile_form = userProfileForm(instance=user_profile)
    variables = RequestContext(request,{'user_profile_form' : user_profile_form})
    return render_to_response('home/edit_profile.html', variables)

person Jhonny    schedule 01.11.2014    source источник
comment
вы хотите отредактировать профиль пользователя в панели администратора?   -  person Hasan Ramezani    schedule 01.11.2014
comment
Я хочу разрешить каждому пользователю редактировать свой профиль. На данный момент у меня уже есть возможность редактировать как root все профили всех пользователей из моей панели администратора, но я хочу разрешить эту задачу пользователю.   -  person Jhonny    schedule 01.11.2014


Ответы (1)


попробуй это:

1- Добавьте это к urls.py:

url(r'^edit_profile/$', 'dracoin.apps.home.views.edit_profile', name='edit_profile'),

2- создайте представление form и user_profile в views.py:

# form
class userProfileForm(forms.ModelForm):
    class Meta:
        model = userProfile

#view
def edit_profile(request):
    user = request.user
    user_profile = user.userprofile

    if request.method == 'POST':
        user_profile_form = userProfileForm(request.POST)
        if user_profile_form.is_valid():
            #update user profile
            user_profile.name = request.POST['name']
            user_profile.user = user
            user_profile.email = request.POST['email']
            user_profile.save()
    else:
        user_profile_form = userProfileForm(instance=user_profile)
    variables = RequestContext( request, {
        'user_profile_form': user_profile_form}
    )
    return render_to_response( 'edit_profile.html', variables )

3- Добавьте шаблон edit_profile.html:

<div> 
    <form  method="POST" action="."> 
        {% csrf_token %} 
            {{ user_profile_form.as_p }} 
        <input type="submit" name="edit_profile" value="Done"> 
    </form>        
</div>
person Hasan Ramezani    schedule 01.11.2014
comment
Спасибо Хасан!! Однако у меня есть проблема с представлением, если user_profile_form.is_valid(): обновить профиль пользователя, страница отладки показывает мне, что у меня проблема с синтаксисом при обновлении профиля пользователя. Что вы думаете?. - person Jhonny; 01.11.2014
comment
трассировка сказала мне, что профиль обновления пользователя имеет SyntaxError: SyntaxError at /edit_profile/недопустимый синтаксис (views.py, строка 120) - person Jhonny; 01.11.2014
comment
пожалуйста, обновите свой ответ. и положить туда свой def edit_profile? это странно. - person Hasan Ramezani; 01.11.2014
comment
Это верно! я плохо скопировал код, извините, у меня последняя ошибка: глобальное имя 'userProfileForm' не определено. Эта трассировка сообщает об этой строке: user_profile_form = userProfileForm(instance=user_profile), я соблюдал идентификацию для всех строк - person Jhonny; 01.11.2014
comment
Давайте продолжим обсуждение в чате. - person Hasan Ramezani; 01.11.2014
comment
вставь userProfileForm в свой views.py из моего ответа. - person Hasan Ramezani; 01.11.2014