2014-11-01 1 views
1

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

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

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

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 

Мой 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) 
+0

сделать вы хотите изменить профиль пользователя в панели администратора? –

+0

Я хочу, чтобы каждый пользователь редактировал свой собственный профиль. В этот момент у меня уже есть возможность редактировать как root все профили всех пользователей из моей панели администратора, но я хочу разрешить эту задачу пользователем. – Jhonny

ответ

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> 
+0

Спасибо Хасан !! Однако у меня есть проблема с представлением «если user_profile_form.is_valid(): обновить профиль пользователя, страница отладки покажет мне, что у меня проблема с синтаксисом в профиле пользователя обновления. Как вы думаете? – Jhonny

+1

какая ошибка? –

+0

traceback сказал мне, что «обновить профиль пользователя» имеет значение SyntaxError: SyntaxError at/edit_profile/ Недопустимый синтаксис (views.py, строка 120) – Jhonny