微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Django 中使用下拉框渲染到模板?

如何解决如何在 Django 中使用下拉框渲染到模板?

我是 Django 初学者。我在渲染到模板时遇到了问题。 我有一个模型(models.py),它的类是“FuelInfo”;包括外键。

from django.db import models


class Traveler(models.Model):
    traveler_name = models.CharField(max_length=10)

    def __str__(self):
        return self.traveler_name

class FuelInfo(models.Model):
    name = models.ForeignKey(Traveler,on_delete=models.SET_NULL,null=True)
    car = models.CharField(null=True,max_length=50)
    efficiency = models.FloatField()

    def __str__(self):
        return str(self.name)

还有 views.py 就像:

from django.shortcuts import render,get_object_or_404
from .models import FuelInfo

def traveler_list(request):
    travelers = FuelInfo.objects.all()
    context = {'travelers':travelers}
    return render(request,'fuelcost/home.html',context)

def traveler_detail(request,pk):
    traveler = get_object_or_404(FuelInfo,pk=pk)
    return render(request,'fuelcost/calfuel.html',{'traveler': traveler})

而 urls.py 是:

from django.urls import path
from . import views


app_name = 'fuelcost'
urlpatterns = [
    path('',views.traveler_list,name='home'),path('<int:pk>/',views.traveler_detail,name='calfuel'),]

我想制作一个下拉列表,渲染到 home.html 中的模板“calfuel.html”。 所以我做了一个模板(“home.html”),比如:

{% extends "base_generic.html" %}

{% block content %}
    <body>

        {% if travelers %}

        <form method="POST" action="{% url 'fuelcost:calfuel' pk=traveler.pk %}">
        {% csrf_token %}
        <select name="traveler">
        {% for traveler in travelers %}
            <option value="{{ traveler.id }}">{{ traveler.name }}</option>
        {% endfor %}    
        </select>
        
        <input type="submit" value="Select" />
        </form>
        
        {% else %}
        <p>No travelers are available</p>
        
        {% endif %}

    </body>

{% endblock %}

但它不起作用并且我收到错误消息。

error messege

(我的 urlpattern 是fuelcost/。) 实际上我可以进入fuelcost/1或fuelcost/2,即名为“calfuel”的views.traveler_detail。但我不能进入燃料成本/即名为“家”的 views.traveler_list。

我不知道我还需要做什么。请告诉我这有什么问题。

解决方法

{% block content %}
<body>

    {% if travelers %}
    {% for traveler in travelers %}
    <form method="POST" action="{% url 'fuelcost:calfuel' pk=traveler.pk %}">
    {% csrf_token %}
    <select name="traveler">
        <option value="{{ traveler.id }}">{{ traveler.name }}</option>    
    </select>
    
    <input type="submit" value="Select" />
    </form>
    {% endfor %}
    
    {% else %}
    <p>No travelers are available</p>
    
    {% endif %}

</body>
{% endblock %}

你必须将表单保持在循环内,以便它可以得到旅行者的pk

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。