繁体   English   中英

Django 2.1将变量传递给模板,

[英]Django 2.1 passing a variable to template,

这里有一个关于将变量传递到Django模板中的问题。 目标是根据摄影类型过滤出一组照片。 我最初想从S3和它所在的文件夹中执行此操作,但是此刻超出了我的技能范围。 我只是为此创建了不同的URL而已。 我遇到的问题是,我想将变量传递到扩展base_layout.html的模板中,但不会为该变量呈现任何内容。 我只是想念怎么做吗?

Model.py

from django.db import models


# Create your models here.
class Gallery(models.Model):
    title = models.CharField(max_length = 50)
    body = models.TextField(max_length = 500)
    created = models.DateTimeField(auto_now_add = True)
    thumb = models.ImageField(default = 'default.jpg', blank = True)
    slug = models.SlugField(blank = True)
    order = models.CharField(max_length = 2, blank = True)

    def __str__(self):
        return self.title

    def body_preview(self):
        return self.body[:50]

class photoUrl(models.Model):
    url = models.CharField(max_length = 128)
    uploaded_on = models.DateTimeField(auto_now_add = True)

class Photos(models.Model):
    title = models.CharField(max_length = 50)
    picture = models.ImageField(blank = True)
    created = models.DateTimeField(auto_now_add = True)
    catagory = models.CharField(max_length=256, choices=[('wedding', 'wedding'), ('portrait', 'portrait'), ('landscape', 'landscape'), ('boudoir', 'boudoir'),], blank = True)

    def __str__(self):
        return self.title

views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.urls import reverse
from . models import Photos

# Create your views here.


def photo_wedding(request):
    photo_list = Photos.objects.filter(catagory = 'wedding').order_by('created')
    photoCat = 'Wedding'
    return render(request, 'gallery/gallery.html', {'photo_list' : photo_list}, {'photoCat' : photoCat})

urls.py

from django.contrib import admin
from django.urls import path
from . import views

app_name='gallery'

urlpatterns = [
    path('wedding/', views.photo_wedding, name='wedding'),
    path('portrait/', views.photo_portrait, name='portrait'),
    path('landscape/', views.photo_landscape, name='landscape'),
    path('boudoir/', views.photo_boudoir, name='boudoir'),
]

gallery.html

{% extends 'gallery/base_layout.html' %}

{% load static %}

{% block gallery %}

    <div class="gallery" id="gallery">
        <div class="container">
            <div class="w3l-heading">

                <h3>{{photoCat}}</h3>

                <div class="w3ls-border"> </div>
            </div>
        </div>
{% endblock gallery %}

render的定义:

render(request, template_name, context=None, content_type=None, status=None, using=None)将给定的模板与给定的上下文字典合并,并返回带有该渲染文本的HttpResponse对象。

render方法将第一个参数作为request ,第二个参数作为template_name ,第三个参数是一个context ,该context是您选择传递给模板的Dictionary类型,您可以使用键访问dictionary的所有值。

因此,您的方法应如下所示:

def photo_wedding(request):
    photo_list = Photos.objects.filter(catagory = 'wedding').order_by('created')
    photoCat = 'Wedding'
    return render(request, 'gallery/gallery.html', {'photo_list' : photo_list, 'photoCat' : photoCat})

你为什么要通过两个字典。 只需添加一个密钥。 那就是上下文数据。

在基于类的视图中,您还可以重载方法get_context_data

使用render()函数,第三个参数是上下文。 上下文是用于将变量发送到模板的字典。 无需通过两个命令

def photo_wedding(request):
    photo_list = Photos.objects.filter(catagory = 'wedding').order_by('created')
    photoCat = 'Wedding'
 context = {'photo_list' : photo_list,'photoCat' : photoCat}
    return render(request, 'gallery/gallery.html', context)

暂无
暂无

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

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