如何编写函数/定义以便在 HTML 模板 Django 中呈现?

Posted

技术标签:

【中文标题】如何编写函数/定义以便在 HTML 模板 Django 中呈现?【英文标题】:How to write functions/definitions such that to render in HTML templates Django? 【发布时间】:2018-08-28 11:15:19 【问题描述】:

models.py

from django.db import models
from django.contrib.auth.models import User

CHOICES = (('Earned Leave','Earned Leave'),('Casual Leave','Casual Leave'),('Sick Leave','Sick Leave'),('Paid Leave','Paid Leave'))

class Leave(models.Model):

    employee_ID = models.CharField(max_length = 20)
    name = models.CharField(max_length = 50)
    user = models.ForeignKey(User, on_delete = models.CASCADE, null =True)
    type_of_leave = models.CharField(max_length = 15, choices = CHOICES)
    from_date = models.DateField()
    to_date = models.DateField()
    )

    def __str__(self):
        return self.name

views.py

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from .forms import LeaveRequestForm
from django.shortcuts import render_to_response
from .models import Leave
...
def leaveRequest(request):
form_class = LeaveRequestForm

if request.method == "POST":
    form = LeaveRequestForm(request.POST)
    if form.is_valid():
        leave = form.save(commit = False)
        leave.user = request.user
        form.save()
    return HttpResponseRedirect("/thanks/")
else:
    return auto_fill_form(request)
def leaves_sick(request):
    data = Leave.objects.filter(employee_ID = request.user.username)
    sl = "sg"
    for obj in data:
        if obj.type_of_leave == 'Sick Leave':
            sl += obj.date_diff
    return render(request, "status.html",'sl':data)

forms.py

from django.forms import ModelForm, Textarea, DateInput
from lrequests.models import Leave

class LeaveRequestForm(ModelForm): 
    class Meta:
        fields = ("name",  "type_of_leave", "from_date", "to_date")
        model = Leave

urls.py

from django.urls import path, include
from . import views

app_name='lrequests'

urlpatterns = [
    path('lrequests/',views.leaveRequest, name = 'request'),
    path('status/', views.get_data, name = 'status'),
    path('status/', views.leaves_sick, name = 'sick'),


]

基本上,这是一个适用于员工出勤、休假类型等的函数。如果员工请求休假类型为“el”(带薪休假),我需要返回他过去有多少次从数据库请求获得的假期(假设数据库中有多个用户的请求)

我正在开发“休假管理系统”。我需要知道用户请求休假的次数。最初,用户使用 ModelForms 向管理员发送请假申请表。有诸如“earned_leave”、....等休假类型。现在我需要检索数据,员工在“earned_leave”、“paid_leave”等方面申请了多少次休假,并在模板中反映该数字。

*更新-我使用的是默认的 dbsqlite3 数据库。

def leave_count(request):
        queryset = Leave.objects.filter(employee_ID = request.user.username, type_of_leave = 'Sick Leave')
        return render(request, "history.html", 'queryset' : queryset)

因为,我不知道如何查询我放在views.py 中的数据库。没用。

【问题讨论】:

custom templatetags 可能就是您想要的。 @serbia99 你能给我举个例子吗,我试过了,但失败得很惨。 你是什么意思“我想声明一个名为'el'的局部变量,从而在每次调用时增加它”? @brunodesthuilliers 喜欢不将el 声明为变量,如何增加呢? @Jose 这没有任何意义——没有变量就不能增加变量。这并没有回答这个问题:“每次调用时增加它”是什么意思? 【参考方案1】:

现在我需要检索数据,员工在“earned_leave”中申请休假的次数

request.user.leave_set.filter(type_of_leave="Earned leave").count()

“paid_leave”等

如果您想在单个 SQL 查询中检索每种休假类型的计数:

from django.db.models import Count
queryset = request.user.leave_set.values("type_of_leave").annotate(count=Count("type_of_leave")).order_by("type_of_leave")
for item in queryset:
    print("type_of_leave: count".format(**item))

如何将变量(无论它是什么类型)传递给模板已经有很好的文档记录,所以我不会在这里举个例子。

【讨论】:

对不起,我在哪里包含此代码?我已经把它放在我的views.py中,带有一个def名称并用url映射它。它没有用,我对models.py做了同样的事情。没有结果。 leave_set 是一个对象吗? @Jose 很抱歉,但 SO 不能替代阅读文档和学习使用 Python 和 Django。所有这些都被广泛记录,并且也不乏教程。【参考方案2】:

你可以在模型中解决这个问题:

在您的 Leave 中 - 您将 users 作为外键。在用户端 - 在模型中,您实际上可以编写:

def get_el(self):
      el = 0
      for x in self.Leave.iterator():
             if x.type_of_leave == 'earned_leave':
                  el++
     return el

在您的模板中 - 您实际上可以编写 user.get_el 来渲染叶子。

您需要使用一些名为 "related_name" 的概念。此外,您需要适当地扩展您的 User 模型。

祝你好运!

【讨论】:

你有一个 SQL 数据库,而不是一个比特桶。 SQL 数据库知道如何计算项目等... @brunodesthuilliers 我有 dbsqlite3 数据库。

以上是关于如何编写函数/定义以便在 HTML 模板 Django 中呈现?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 def clean_slug 函数包含到我的视图或模板中,以便它可以工作并显示“title alr exists”

django模板templates详解

Django模板中的Python [关闭]

django 根据请求向所有视图添加上下文

为啥我对朋友函数有未定义的引用?

通过python根据条件向html添加类