Django在temp中呈现db字段

2024-04-27 00:49:25 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能修改我的代码吗?

背景:
用户,一旦在'开始.html'模板,将输入其名称并按submit。然后在下一个模板上,'游戏.html'中,应该有一个包含该用户名的段落选项卡。

问题:
我一定是写错了什么,因为用户名没有呈现在'游戏.html'模板。或者,我也可能是存储错误。如有任何建议或更正,将不胜感激!在

在模型.py-计划生育

from django.db import models

class Player(models.Model):
    #first player name
    fp_name = models.CharField(max_length=30, default='')

在表单.py-我不确定这是否真的需要。。。?在

^{pr2}$

在视图.py在

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, render_to_response
import os
from .forms import PlayerInfo
from .models import Player

def index(request):
    return render(request, 'index.html')

def start(request):
    if request.method == 'Post':
        form = PlayerInfo(request.POST)
        if form.is_valid():
            obj = Player()
            obj.fp_name = form.cleaned_data['fp_name']
            return HttpResponseRedirect('/')
    else:
        form = PlayerInfo()                      
    return render(request, 'start.html')

def game(request):
    return render_to_response('game.html', {'obj': Player.objects.all()})

在开始.html-意思是提交一个玩家的名字

{% extends 'base.html' %}
{% block botRow %}
    <form method="post">
    {% csrf_token %}
    <label for="fp_name">First Player Name</label>
    <input id="fp_name" type="text" name="fp_name" maxlength="30" required />
    <input type="submit" value="Submit" />
    </form>
{% endblock %}

在游戏.html-是为了给玩家一个名字

{% extends 'base.html' %}
{% block midRow %}
<p>{{ obj.fp_name }}</p>
{% endblock %}

Tags: namefrompyimportform模板obj游戏
2条回答

使用用户.objects.all()您正在获取站点所有用户的集合。它不是当前用户。因此,集合没有参数fp_name。使用请求.用户获取当前登录用户。在

在某些代码中,也存在冗余:

  1. Django包含用户类,能够直接存储名字。所以,你根本不需要申报。https://docs.djangoproject.com/en/1.11/ref/contrib/auth/#django.contrib.auth.models.User
  2. 有一类特殊的表单-ModelForm。它可以帮助您尽快将模型的字段映射到表单的字段。(https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/
  3. 有一类特殊的视图-CreateView。它帮助您实现模型创建的基本逻辑。(https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/#django.views.generic.edit.CreateView
  4. 旨在节省时间的表格。所以,在模板中,最好使用内置的表单呈现引擎,而不是手动声明它们的字段。(https://docs.djangoproject.com/en/1.11/topics/forms/#the-template
  5. 如果游戏.html只允许注册用户使用@login_required decorator来限制对站点这一部分的访问。在

在您的game.html中,obj是所有Users的查询集,因此您应该遍历列表,查看文档中的块{a1}:

{% extends 'base.html' %}
{% block midRow %}

    {% for user in obj %}
        <p>{{ user.fp_name }}</p>
    {% endfor %}

{% endblock %}

相关问题 更多 >