繁体   English   中英

Django在模板中渲染db字段

[英]Django rendering a db field in the template

有人可以更正我的代码吗?

背景:
一旦进入“ start.html”模板,该用户将输入其名称,然后按提交。 然后在下一个模板“ game.html”上,应该有一个包含该用户名的段落标签。

问题:
由于用户名未显示在“ game.html”模板上,因此我必须写错了一些内容。 或者,我也可能将其存储为错误。 任何建议或纠正将不胜感激!

models.py-fp

from django.db import models

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

forms.py-我不确定是否真的需要...?

from django import forms

class PlayerInfo(forms.Form):
    fp_name = forms.CharField(max_length=30, label='First player name')

views.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()})

start.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 %}

game.html-表示玩家姓名的意思

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

game.htmlobj是查询集合中的所有的Users ,所以你应该遍历这个列表,旁观块用于在文档:

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

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

{% endblock %}

使用User.objects.all(),您可以获得所有站点用户的集合。 它不是当前用户。 因此,该集合没有参数fp_name。 使用request.user获取当前登录的用户。

另外,您的代码中有些冗余:

  1. Django包含User类,可以直接存储First Name。 因此,您根本不需要声明它。 https://docs.djangoproject.com/zh-CN/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/zh-CN/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. 如果只允许注册用户使用game.html,则最好使用@login_required装饰器来限制对网站这一部分的访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM