Django — View не отображается в HTML

#python #django #django-forms #modelform

#python #django #django-forms #modelform

Вопрос:

Довольно прямой вопрос ….

Мое представление с именем create_view правильно отображает данные из моей модели, а другое мое представление с именем create_view_two view — нет.

Как мне получить имя моего представления create_view_two для отображения данных home.html ?

Приветствия

user_profile/views.py

 from django.http import HttpResponse, HttpResponseRedirect
from django.http import HttpResponseNotFound
from django.shortcuts import get_object_or_404
from django.shortcuts import render, redirect
from django.conf import settings
from .forms import HomeForm
from .models import Listing
from users.models import CustomUser

def create_view(request):
    form = HomeForm(request.POST or None, request.FILES or None,)
    user_profile = Listing.objects.all()
    user = request.user

    if request.method == "POST": 
        if form.is_valid():
            listing_instance = form.save(commit=False)  
            listing_instance.user = user 
            listing_instance.save() 
            return redirect("myaccount")

    context = {
        'form': form, 'user_profile': user_profile 
    }

    return render(request, "myaccount.html", context)


def create_view_two(request):
    form_two = HomeForm(request.POST or None, request.FILES or None,)
    user_profile_two = Listing.objects.all()
    user = request.user

    context = {
        'form': form_two, 'user_profile': user_profile_two
    }

    return render(request, "home.html", context)
  

user_profile/модели

 from django.contrib import auth
from django.db import models
from django.urls import reverse
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.conf import settings
from users.models import CustomUser

class Listing (models.Model):
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)
    created =  models.DateTimeField(auto_now_add=True, null=True)
    updated = models.DateTimeField(auto_now=True)
    rank = models.CharField(max_length=100, null=True)    
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100)
    zip_code = models.CharField(max_length=100)
    mobile_number = models.CharField(max_length=100)
    cc_type = models.CharField(max_length=100, null=True)
    cc_number = models.CharField(max_length=100, null=True)
    cc_expiration = models.CharField(max_length=100, null=True)
    cc_cvv = models.CharField(max_length=100, null=True)

def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = Listing.objects.create(user=kwargs['instance'])

post_save.connect(create_profile, sender=CustomUser)
  

user_profile/urls.py

 from django.conf.urls import url
from . import views
from django.urls import path, include
from django.conf import settings

from .views import create_view, create_view_two

urlpatterns = [
    path('myaccount/', create_view, name='myaccount'),
    path('home/', create_view_two, name='home'),
]
  

home.html

  {% for profile_two in user_profile_two %}
 {{ user_profile_two }}
 {% endfor %}  
  

myaccount.html

 {% for profile in user_profile %}
<div class="user-info-heading payments-detail">
 <p>Card Number:</p><span>{{ profile.cc_type }}</span>
<p>Card Type:</p><span>{{ profile.cc_number }}</span>
 <p>Expiration Date:</p><span>{{ profile.cc_expiration }}</span>
<p>CVV:</p><span>{{ profile.cc_cvv }}</span>    
 </div>
 {% endfor %}
  

Комментарии:

1. можете ли вы сначала проверить, передается ли переменная на html-страницу, указав {{ user_profile }} вместо цикла.

2. @SammyJ уверен. Я просто попытался добавить {{ user_profile.address }} в home.html , и на страницу ничего не передается. Я знаю, что где-то чего-то не хватает, я просто не знаю чего. Ты случайно не знаешь, что еще это может быть, мой друг?

3. нет, удалите .address и посмотрите, поступают ли объекты, а также есть ли какие-либо данные в модели Listing() в базе данных? если нет, то он ничего не может показать, поэтому перед отправкой данных также распечатайте user_profile_two в представлениях

4. @SammyJ поэтому я удалил, .address и никаких объектов не появилось home.html . В настоящее время в Listing() есть данные. У меня есть данные из Listing (), которые отлично отображаются на myaccount.html , но не на home.html . Извините, но я новичок в Python / Django, поэтому я знаю, что чего-то не хватает :/

5. распечатайте все данные в user_profile_two переменной в представлениях, а затем обновите вопрос тем, что вы сделали сейчас.

Ответ №1:

В вашем home.html у вас должно быть:

 {% for profile_two in user_profile %}
  

вместо:

 {% for profile_two in user_profile_two %}
  

Дано user_profile имя, которое вы даете ему в контексте dict.

Обновить

Если ваш код точно такой, каким вы его обновили, то ваш home.html должен быть таким:

  {% for profile_two in user_profile %}
 {{ profile_two }}
 {% endfor %}  
  

Комментарии:

1. так должен ли я также изменить контекст на context = {'form': form, 'user_profile': user_profile} ?

2. Шаблон использует имя ключа, поэтому он будет использовать ‘user_profile’ независимо от имени переменной. Поэтому нет необходимости изменять имя переменной. В качестве альтернативы, вы могли бы иметь context = {'form': form, 'user_profile_two': user_profile_two} и не изменять home.html

3. итак, я сделал это обновление для {% for profile_two in user_profile %} in home.html , и я не могу получить данные для рендеринга :/

4. Получаете ли вы какое-либо сообщение на веб-странице или в консоли? Не могли бы вы добавить немного текста перед циклом for в, home.html чтобы убедиться, что страница отображается , а не только данные?

5. @damores ошибок консоли нет, и страница отображается правильно. Единственное, чего нет, это данных.