【问题标题】:How to get rid of no carparks found for no such campus如何摆脱没有找到这样的校园的停车场
【发布时间】:2020-11-25 18:10:19
【问题描述】:

我有两个模型:校园和停车场。停车场信息的数据存储在数据库中的 json 文件中。

models.py

from django.db import models

class Campus(models.Model):
  campus_id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=100)
  def __str__(self):
    return self.name

class Carpark(models.Model):
  carpark_id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=100)
  spaces = models.IntegerField()
  campus_id = models.ForeignKey()
  disabled_spaces = models.IntegerField()
  def __str__(self):
    return self.name

views.py

from django.shortcuts import render
from django.http import HttpResponse
from parkatdcu.models import Campus, Carpark
import requests

def index(request):
  context = {}
  return render(request, "parkatdcu/index.html", context)

def carparks(request):
  context = {}
  Base_URL = 'http://jfoster.pythonanywhere.com/carparks/'
  campus_name = request.GET['campus']
  try:
    campus = Campus.objects.get(name__iexact=campus_name)
  except Campus.DoesNotExist:
    print('No such campus')
    return render(request,"parkatdcu/carparks.html",context)
  carparks = Carpark.objects.filter(campus_id=campus)
  carpark_info= []
  for carpark in carparks:
    URL = Base_URL + carpark.name
    r = requests.get(URL).json()
    if 'spaces_available' in r:
      spaces_available = r['spaces_available']
    else:
      spaces_available = 'not available'
    carpark_info.append({
                         'name': carpark.name,
          
           'spaces': carpark.spaces,
                         'disabled_spaces': carpark.disabled_spaces,
                         'spaces_available': spaces_available
                         }
                        )
context['campus'] = campus_name
context['carparks'] = carpark_info
return render(request,"parkatdcu/carparks.html",context)

carparks.html

{% if campus %}
<h2>{{ campus }}</h2>
{% else %}
<h2>No such campus</h2>
{% endif %}
{% if carparks %}
<ul>
{% for carpark in carparks %}
<li>{{carpark.name}}: {{carpark.spaces}} spaces, {{carpark.disabled_spaces}} spaces for people with 
disabilities
<br>Spaces available:  {{ carpark.spaces_available }}<br><br>
</li>
{% endfor %}
{% else%}
<p>No carparks found</p>
{% endif %}
</ul>

当我在搜索框中输入未存储在 Django 数据库中的校园名称时,它会同时显示“没有这样的校园”和“找不到停车场”。如何只为不存在的校区打印“没有这样的校区”?

【问题讨论】:

  • 问题不是很清楚,能否给我们展示一下models(校园和停车场以及它们之间的关系)和渲染的view function carparks.html?
  • 我还想为数据库中没有停车场的校园打印“找不到停车场”
  • Carpark 模型中你有这个campus_id = models.ForeignKey(),你缺少一些参数,它应该是campus_id = models.ForeignKey(Campus, on_delete=models.CASCADE),如果是这样你应该重新运行迁移命令。参考docs.djangoproject.com/en/3.1/topics/db/examples/many_to_one
  • 感谢 cizario,但它现在为不在数据库中的校园打印“没有这样的校园”和“找不到停车场”。我如何只打印那个校区的“没有这样的校区”?
  • 我在最后期限内修复此代码,因此它只为不在数据库中的校园打印“没有这样的校园”,为数据库中的校园打印“未找到停车场”没有停车场。

标签: python html django database


【解决方案1】:

看看下面的代码,它应该只为不在数据库中的校园显示No such campus 消息。

<h2>{% if campus %} {{ campus }} {% else %} No such campus {% endif %}</h2>



{% if campus %} {# HERE -- i just wrapped the block with if statement #}



  {% if carparks %}
    <ul>
      {% for carpark in carparks %}
      <li>{{carpark.name}}: {{carpark.spaces}} spaces, {{carpark.disabled_spaces}} spaces for people with disabilities<br>Spaces available:  {{ carpark.spaces_available }}<br><br></li>
      {% endfor %}
    </ul>
  {% else%}
    <p>No carparks found</p>
  {% endif %}



{% endif %}

【讨论】:

    【解决方案2】:

    你应该只需要删除上面的行

    {% if campus %}
        <h2>{{ campus }}</h2>
    {% else %}
        <h2>No such campus</h2>
    {% endif %}
    
    {% if carparks %}
        <ul>
    
        {% for carpark in carparks %}
            <li>{{carpark.name}}: {{carpark.spaces}} spaces, {{carpark.disabled_spaces}} spaces for people with 
    disabilities
            <br>Spaces available:  {{ carpark.spaces_available }}<br><br>
            </li>
        {% endfor %}
    
    {% else%}                    <--- REMOVE THIS LINE 
        <p>No carparks found</p> <--- REMOVE THIS LINE
        
        </ul>                    <--- MOVE THIS LINE INSIDE {% endif %}
    {% endif %}
    

    【讨论】:

    • 它有效,但我如何在数据库中为没有停车场的校园打印“未找到停车场”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 2020-08-10
    • 2021-07-07
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2021-01-27
    相关资源
    最近更新 更多