ListView в Django Assistance - PullRequest
       8

ListView в Django Assistance

0 голосов
/ 24 января 2019

Хорошо, поэтому я только что провел довольно обширное онлайн-урок по Django и хотел погрузиться в свой первый проект, чтобы посмотреть, как я буду двигаться.

Я начал хорошо, а затем натолкнулся на довольно большой блокпост, которыйЯ пытаюсь победить без удачи, так что если вы, ребята, могли бы помочь, я навсегда останусь в вашем долгу!

Так что сам проект просто создает сайт для нескольких моих товарищей, где мы можем войти и посмотретьнекоторые статистические данные о ставках, которые мы имеем друг с другом.

Что я сделал до сих пор:

Я создал две модели в models.py со следующим кодом:

   from django.db import models

    # Create your models here.

    class Team(models.Model):
        team_name = models.CharField(max_length=500, unique=True)
        wins = models.PositiveIntegerField()
        losses = models.PositiveIntegerField()

    class Predictions(models.Model):
        combined_teams = models.CharField(max_length=800)
        player_name = models.CharField(max_length=200, primary_key=True)
        predicted_wins = models.PositiveIntegerField()

        def __str__ (self):
            return self.player_name

Я создал экран входа в систему, это первый экран, к которому придет пользователь (не имеет отношения к вопросу)

Я создал статическую папку с некоторыми стилями CSS для нескольких страниц и внес некоторые незначительные измененияк файлам настроек.

Затем я настроил свой файл views.py и несколько файлов urls.py следующим образом:

###VIEWS.PY####

from django.shortcuts import render
from django.views.generic import TemplateView, ListView
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Predictions, Team

class WelcomeView(LoginRequiredMixin,TemplateView):
    template_name = 'merchbet/welcome.html'

class HomeView(LoginRequiredMixin, TemplateView):
    template_name = 'merchbet/home.html'

class PredictionListView(LoginRequiredMixin, ListView):    
    model = Predictions


    def get_queryset(self):
        return Predictions.objects.order_by('-player_name')

class GalleryView(LoginRequiredMixin,TemplateView):
    template_name = 'merchbet/gallery.html'

URLS.PY

from django.contrib import admin
from django.urls import path,include
from django.contrib.auth.urls import views

urlpatterns = [
    path('', views.LoginView.as_view(), name='login'),
    path('account/profile/', include('merchbet.urls')),
    path('admin/', admin.site.urls),
]

URLS.PY ### В МОЕМ ПРИЛОЖЕНИИ FOLDER

from django.urls import path
from . import views

app_name = 'merchbet'

urlpatterns = [
    path('', views.WelcomeView.as_view(), name='welcome'),
    path('home/', views.HomeView.as_view(), name='home'),
    path('predictions/', views.PredictionListView.as_view(), name='prediction_list'),
    path('gallery/', views.GalleryView.as_view(), name='gallery')

Затем я выполнил следующий сценарий, чтобы в этом сезоне я мог загрузить «прогнозы» своих друзей на наши ставки в НБА с помощью следующей программы:

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','mysite.settings')

import django
django.setup()

from merchbet.models import Predictions, Team

predictions = ['Burger', 'Houston Rockets and Oklahoma City Thunder', 101,
    'Buzz','Houston Rockets and Boston Celtics', 115, 'Kimon', 'Sacramento Kings and Atlanta Hawks', 44,
    'Muller','Utah Jazz and Boston Celtics', 118, 'Barlow', 'Los Angeles Lakers and Milwaukee Bucks', 102,
    'Larter','Golden State Warriors and Atlanta Hawks', 83, 'Hume', 'Los Andeles Lakers and Philadelphia 76ers',
    104]

def add_predictions():

    for index, entry in enumerate(predictions):

        if index < len(predictions)-2:

            if (type(predictions[index+2]) == type(1)):

                player_name = predictions[index]
                combined_teams = predictions[index+1]
                predicted_wins = predictions[index+2]

                preds = Predictions.objects.get_or_create(player_name=player_name,combined_teams=combined_teams,predicted_wins=predicted_wins)[0]


if __name__ == '__main__':
    print("Populating the databases...Please Wait")
    add_predictions()
    print('Populating Complete')

Вышеработал нормально, и я могу видеть в моем представлении Django Admin сайта, что есть 7 объектов класса Predictions, все названные в честь переменной «player_name», поскольку это первичный ключ:

Так что после всего этого яя пытаюсь просто использовать цикл for в html-документе, который поможет распечатать «player_name», а затем я могу показать «mixed_teams» и «realted_wins », но я просто не могу заставить его работать.

{% for prediction in prediction_list %}
<h1>{{ prediction.player_name }}</h1>
{% endfor %}

Я приложил кучу усилий к этому сообщению, поэтому я надеюсь, что какой-нибудь гений сможет протянуть руку!

edit: я знаю, что цвет текста белый, это противчерный фон, так что это не проблема: -)

Спасибо!

1 Ответ

0 голосов
/ 24 января 2019

Вам необходимо использовать object_list вместо prediction_list для merchbet/prediction_list.html, например:

{% for prediction in object_list %}
    <h1>{{ prediction.player_name }}</h1>
{% endfor %}

Для получения более подробной информации, пожалуйста, проверьте документацию .

...