首页 > 解决方案 > Django 帮助中的 ListView

问题描述

好的,所以我刚刚在网上完成了一个相当广泛的 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### 在我的应用程序文件夹中

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

然后我执行了以下脚本,这样我就可以使用以下程序加载我朋友对本赛季 NBA 投注的“预测”:

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 视图中看到,Predictions 类的 7 个对象都以“player_name”变量命名,因为它是主键:

因此,在所有这些之后,我试图在 html 文档中简单地使用 for 循环,这将有助于打印出“player_name”,然后我可以显示“combined_teams”和“predicted_wins”,但我就是无法得到它工作。

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

我已经为这篇文章付出了很多努力,所以我希望那里的一些天才可以伸出援助之手!

编辑:我知道文本的颜色是白色的,它是黑色背景的,所以这不是问题:-)

谢谢!

标签: djangopython-3.xdjango-modelsdjango-views

解决方案


您需要使用object_list而不是prediction_listfor merchbet/prediction_list.html,如下所示:

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

有关更多详细信息,请查看文档


推荐阅读