Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python if语句在Django模板中不起作用_Python_Django_Django Templates - Fatal编程技术网

Python if语句在Django模板中不起作用

Python if语句在Django模板中不起作用,python,django,django-templates,Python,Django,Django Templates,模板的for循环中的if语句不起作用。它仍然显示不可用的项目。 这是我的模板的代码 form-template.html {%用于表单%]中的字段 {%if eventprojector.projector.available%} {{field.errors}} {{field.label_tag} {{field}} {%endif%} {%endfor%} models.py class Projectors(models.Model): pro = models.CharField(ma

模板的
for
循环中的
if
语句不起作用。它仍然显示不可用的项目。 这是我的模板的代码

form-template.html
{%用于表单%]中的字段
{%if eventprojector.projector.available%}
{{field.errors}}
{{field.label_tag}
{{field}}
{%endif%}
{%endfor%}
models.py

class Projectors(models.Model):
pro = models.CharField(max_length=50)
sec = models.ForeignKey(Section)
available = models.BooleanField(default=True)
def __str__(self):
             return self.pro 
class Eventprojector(models.Model):
projector = models.ForeignKey(Projectors)
date = models.DateField(blank=True, null=True)
start = models.CharField(max_length=50, null=True)
end = models.CharField(max_length=50, null=True)
is_accept = models.IntegerField(default=0)

def get_absolute_url(self):
    return reverse( 'retest:eventprojectorform')
def __str__(self):
             return str(self.id)
views.py

def projectoraccept(request, eventprojector_id):
eventprojector = get_object_or_404(Eventprojector, pk=eventprojector_id)
if request.method == 'POST':
    eventprojector.is_accept = eventprojector.is_accept+1
    eventprojector.save(update_fields=['is_accept'])
        if eventprojector.is_accept == 3:
            if eventprojector.projector.sec.sec_name == 'CS_dept':
                eventprojector.projector.available = False
                eventprojector.projector.save(update_fields=['available'])
            elif eventprojector.projector.sec.sec_name == 'EC_dept':
                eventprojector.projector.available = False
                eventprojector.projector.save(update_fields=['available'])
            elif eventprojector.projector.sec.sec_name == 'EEE_dept':
                 eventprojector.projector.available = False
                 eventprojector.projector.save(update_fields=['available'])
            elif eventprojector.projector.sec.sec_name == 'IEEE':
                 eventprojector.projector.available = False
                eventprojector.projector.save(update_fields=['available'])
            elif eventprojector.projector.sec.sec_name == 'TCP_dept':
                 eventprojector.projector.available = False
                 eventprojector.projector.save(update_fields=['available'])
return render(request, 'event/projectordetails.html' , {'eventprojector' : eventprojector })

以下是重构代码,它将根据您的代码适用于可用和不可用项:

事件/模型。py:

from django.db import models

# Create your models here.
class Projectors(models.Model):
    pro = models.CharField(max_length=50)
    available = models.BooleanField(default=True)
    def __str__(self):
        return self.pro

class Eventprojector(models.Model):
    projector = models.ForeignKey(Projectors)
    date = models.DateField(blank=True, null=True)
    start = models.CharField(max_length=50, null=True)
    end = models.CharField(max_length=50, null=True)
    is_accept = models.IntegerField(default=0)

    def get_absolute_url(self):
        return reverse( 'retest:eventprojectorform')
    def __str__(self):
        return str(self.id)
from django.conf.urls import url

from . import views

urlpatterns = [
    # ex: /event/1/
    url(r'^(?P<eventprojector_id>[0-9]+)/$', views.projectoraccept, name='projectoraccept'),
]
from django.shortcuts import render, get_object_or_404
from .models import Eventprojector
# Create your views here.

def projectoraccept(request, eventprojector_id):
    eventprojector = get_object_or_404(Eventprojector, pk=eventprojector_id)
    eventprojector.is_accept = eventprojector.is_accept+1
    eventprojector.save(update_fields=['is_accept'])
    if eventprojector.is_accept == 3:
        eventprojector.projector.available = False
        eventprojector.projector.save(update_fields=['available'])
    return render(request, 'event/projectordetails.html' , {'eventprojector' : eventprojector })
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^event/', include('event.urls')),
    url(r'^admin/', admin.site.urls),
]
{% if eventprojector.projector.available %}
    <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
    <span class="text-danger small">TEST</span>
    </div>
    <label class="control-label col-sm-2">TESTTEST</label>
    <div class ="col-sm-10">TESTETST</div>
    </div>
{% endif %}
事件/url.py:

from django.db import models

# Create your models here.
class Projectors(models.Model):
    pro = models.CharField(max_length=50)
    available = models.BooleanField(default=True)
    def __str__(self):
        return self.pro

class Eventprojector(models.Model):
    projector = models.ForeignKey(Projectors)
    date = models.DateField(blank=True, null=True)
    start = models.CharField(max_length=50, null=True)
    end = models.CharField(max_length=50, null=True)
    is_accept = models.IntegerField(default=0)

    def get_absolute_url(self):
        return reverse( 'retest:eventprojectorform')
    def __str__(self):
        return str(self.id)
from django.conf.urls import url

from . import views

urlpatterns = [
    # ex: /event/1/
    url(r'^(?P<eventprojector_id>[0-9]+)/$', views.projectoraccept, name='projectoraccept'),
]
from django.shortcuts import render, get_object_or_404
from .models import Eventprojector
# Create your views here.

def projectoraccept(request, eventprojector_id):
    eventprojector = get_object_or_404(Eventprojector, pk=eventprojector_id)
    eventprojector.is_accept = eventprojector.is_accept+1
    eventprojector.save(update_fields=['is_accept'])
    if eventprojector.is_accept == 3:
        eventprojector.projector.available = False
        eventprojector.projector.save(update_fields=['available'])
    return render(request, 'event/projectordetails.html' , {'eventprojector' : eventprojector })
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^event/', include('event.urls')),
    url(r'^admin/', admin.site.urls),
]
{% if eventprojector.projector.available %}
    <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
    <span class="text-danger small">TEST</span>
    </div>
    <label class="control-label col-sm-2">TESTTEST</label>
    <div class ="col-sm-10">TESTETST</div>
    </div>
{% endif %}
statckoverflow/url.py:

from django.db import models

# Create your models here.
class Projectors(models.Model):
    pro = models.CharField(max_length=50)
    available = models.BooleanField(default=True)
    def __str__(self):
        return self.pro

class Eventprojector(models.Model):
    projector = models.ForeignKey(Projectors)
    date = models.DateField(blank=True, null=True)
    start = models.CharField(max_length=50, null=True)
    end = models.CharField(max_length=50, null=True)
    is_accept = models.IntegerField(default=0)

    def get_absolute_url(self):
        return reverse( 'retest:eventprojectorform')
    def __str__(self):
        return str(self.id)
from django.conf.urls import url

from . import views

urlpatterns = [
    # ex: /event/1/
    url(r'^(?P<eventprojector_id>[0-9]+)/$', views.projectoraccept, name='projectoraccept'),
]
from django.shortcuts import render, get_object_or_404
from .models import Eventprojector
# Create your views here.

def projectoraccept(request, eventprojector_id):
    eventprojector = get_object_or_404(Eventprojector, pk=eventprojector_id)
    eventprojector.is_accept = eventprojector.is_accept+1
    eventprojector.save(update_fields=['is_accept'])
    if eventprojector.is_accept == 3:
        eventprojector.projector.available = False
        eventprojector.projector.save(update_fields=['available'])
    return render(request, 'event/projectordetails.html' , {'eventprojector' : eventprojector })
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^event/', include('event.urls')),
    url(r'^admin/', admin.site.urls),
]
{% if eventprojector.projector.available %}
    <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
    <span class="text-danger small">TEST</span>
    </div>
    <label class="control-label col-sm-2">TESTTEST</label>
    <div class ="col-sm-10">TESTETST</div>
    </div>
{% endif %}
stackoverflow/event/templates/event/projectordetails.html:

from django.db import models

# Create your models here.
class Projectors(models.Model):
    pro = models.CharField(max_length=50)
    available = models.BooleanField(default=True)
    def __str__(self):
        return self.pro

class Eventprojector(models.Model):
    projector = models.ForeignKey(Projectors)
    date = models.DateField(blank=True, null=True)
    start = models.CharField(max_length=50, null=True)
    end = models.CharField(max_length=50, null=True)
    is_accept = models.IntegerField(default=0)

    def get_absolute_url(self):
        return reverse( 'retest:eventprojectorform')
    def __str__(self):
        return str(self.id)
from django.conf.urls import url

from . import views

urlpatterns = [
    # ex: /event/1/
    url(r'^(?P<eventprojector_id>[0-9]+)/$', views.projectoraccept, name='projectoraccept'),
]
from django.shortcuts import render, get_object_or_404
from .models import Eventprojector
# Create your views here.

def projectoraccept(request, eventprojector_id):
    eventprojector = get_object_or_404(Eventprojector, pk=eventprojector_id)
    eventprojector.is_accept = eventprojector.is_accept+1
    eventprojector.save(update_fields=['is_accept'])
    if eventprojector.is_accept == 3:
        eventprojector.projector.available = False
        eventprojector.projector.save(update_fields=['available'])
    return render(request, 'event/projectordetails.html' , {'eventprojector' : eventprojector })
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^event/', include('event.urls')),
    url(r'^admin/', admin.site.urls),
]
{% if eventprojector.projector.available %}
    <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
    <span class="text-danger small">TEST</span>
    </div>
    <label class="control-label col-sm-2">TESTTEST</label>
    <div class ="col-sm-10">TESTETST</div>
    </div>
{% endif %}
然后运行服务器开始测试:

1、当您第一次输入
http://127.0.0.1:8000/event/1/
,它将显示如下形式:(这里是eventprojector中的“is_accept”字段加1等于2,检查查看功能)


试验
测试
测试人员
2、当您再次输入url
http://127.0.0.1:8000/event/1/
,eventprojector中的“is_accept”字段将再次加1为3,然后它将设置
eventprojector.projector.available=False
,在这里您无法看到元素,它在模板中为空


希望上面的代码可以帮助您使用参数eventprojector正确呈现模板projectordetails.html,请注意呈现函数
render(请求'event/projectordetails.html',{'eventprojector':eventprojector})
将仅使用参数
eventprojector
呈现到tempalte
事件/projectordetails.html
。您的模板中可能存在一些不匹配的地方?

您应该单独测试此模板(在django之外);尝试使用渲染器渲染它。如果仍然遇到问题,请发布要与模板一起呈现的输入数据。否则这里的人就帮不上忙了……试着用
{%endif%}
替换
{%endif%}
,注意前缀空格。变量
eventprojector.projector.available
在您的视图中是
布尔值吗?
是的。。它是一个布尔字段@Tiny.dwy,如果在for loop的外部,则不移动。因为“eventprojector.projector.available”不依赖于字段,并且是常量!