2015-10-22 56 views
2

那麼,我是新的使用Python和Django然後,我想知道我可以在視圖中調用幾個函數,例如我正在做一個應用程序,其中人們購買服務器,也recive通知,然後我想調用的功能,所有這一切都沒有問題,我做登錄工作,但註冊不,和通知工程,當我禁用表單調用進行註冊,因爲我希望所有這些東西在同一頁面,例如稱這種現象的layout.html,就像基地,現在看起來我的看法如何調用幾個函數在一個公正的視圖

Views.py

def index(request): 
    if request.method == 'POST': 
     form = RegistroUserForm(request.POST, request.FILES) 
    else: 
     form = RegistroUserForm() 
    context = { 
     'form': form 
    } 
    notifi = Notificaciones.objects.all() 
    return render(request,'app/index.html',context) 

def registro_usuario_view(request): 
    if request.method == 'POST': 
     # Si el method es post, obtenemos los datos del formulario 
     form = RegistroUserForm(request.POST, request.FILES) 

     # Comprobamos si el formulario es valido 
     if form.is_valid(): 
      # En caso de ser valido, obtenemos los datos del formulario. 
      # form.cleaned_data obtiene los datos limpios y los pone en un 
      # diccionario con pares clave/valor, donde clave es el nombre del campo 
      # del formulario y el valor es el valor si existe. 
      cleaned_data = form.cleaned_data 
      username = cleaned_data.get('username') 
      password = cleaned_data.get('password') 
      email = cleaned_data.get('email') 
      # E instanciamos un objeto User, con el username y password 
      user_model = User.objects.create_user(username=username, password=password) 
      # Añadimos el email 
      user_model.email = email 
      # Y guardamos el objeto, esto guardara los datos en la db. 
      user_model.save() 
      # Ahora, creamos un objeto UserProfile, aunque no haya incluido 
      # una imagen, ya quedara la referencia creada en la db. 
      user_profile = UserProfile() 
      # Al campo user le asignamos el objeto user_model 
      user_profile.user = user_model 
      # Por ultimo, guardamos tambien el objeto UserProfile 
      user_profile.save() 
    else: 
     # Si el mthod es GET, instanciamos un objeto RegistroUserForm vacio 
     form = RegistroUserForm() 
    # Creamos el contexto 
    context = {'form': form} 
    # Y mostramos los datos 
    return render(request, 'app/registro.html', context) 

然後在我的layout.html,包括我registro.htmlnotificaciones.html,但在視圖中只能調用registro或notificaciones,我想知道我是怎樣包括兩者工程。

+0

你的問題不明確。視圖函數可以調用任意數量的其他函數,但絕對沒有限制。你有沒有機會談論渲染模板?那麼現在你知道這個詞了,你能不能更新這個問題 – e4c5

回答

2

我認爲你有一些錯誤的概念。模板(Layout.html)不會調用任何函數。在views.py該代碼使用模板來創建一個將要處理到瀏覽器

你的兩個功能共享了大量的代碼,除了這一行中的第一個所有完整的HTML頁面是一樣的:

notifi = Notificaciones.objects.all() 

您可能想要擺脫def index()並將上一行移動到def registro_usuario_view()

如果我理解它是正確的,您想在模板中渲染Notificaciones。但是你不會將notifi傳遞給任何地方的渲染器。您必須將其添加到上下文中。例如:

notifications = Notifications.objects.all() 

context = {"form": form, 
      "notifications": notifications} 

然後在你的模板,您可以訪問{{ notifications }}及其字段和方法,讓說:

{% for notification in notifications %} 
    In {{ notifications.date }}, {{ notifications.author }} said: 
    {{ notifications.message }} 
{% endfor %} 
+0

非常感謝你,那就是作品 –

+0

那麼你應該接受答案。 – xbello

相關問題