Django自定义模板标签与过滤器

news2024/11/19 23:31:52

title: Django自定义模板标签与过滤器
date: 2024/5/17 18:00:02
updated: 2024/5/17 18:00:02
categories:

  • 后端开发

tags:

  • Django模版
  • 自定义标签
  • 过滤器开发
  • 模板语法
  • Python后端
  • 前端集成
  • Web组件

在这里插入图片描述

Django模板系统基础

1. Django模板语言概述

Django模板语言(DTL)是一种用于在HTML中插入动态内容的语言。它允许开发者在模板中使用变量、标签、过滤器和注释,以便动态生成页面内容。变量用于显示动态数据,标签用于控制模板逻辑,过滤器用于格式化变量的输出,注释用于添加注释而不会在最终渲染中显示。

2. 内置模板标签与过滤器的使用

Django提供了丰富的内置模板标签和过滤器,用于简化模板开发过程。常用的标签包括:

  • {% if %}:条件判断
  • {% for %}:循环遍历数据
  • {% block %}:定义可被子模板覆盖的内容块 常用的过滤器包括:
  • {{ variable|filter }}:应用过滤器对变量进行格式化,如日期格式化、字符串处理等。
3. 模板继承与包含

模板继承是一种重要的技术,可以帮助开发者减少重复代码,提高代码复用性。在Django中,可以使用{% extends %}
标签声明模板继承关系,子模板可以覆盖父模板中定义的块内容。另外,{% include %}标签允许将一个模板包含到另一个模板中,实现模块化开发。

自定义过滤器入门

1. 创建第一个自定义过滤器

要创建自定义过滤器,首先需要在Django应用的某个合适位置(通常是templatetags
目录下)创建一个Python模块,该模块包含自定义过滤器的代码。自定义过滤器是一个Python函数,接受一个或多个参数,并返回处理后的结果。以下是一个简单的示例:

# my_filters.py

from django import template

register = template.Library()


@register.filter
def add_hello(value):
    return f"Hello, {value}"

2. 注册和使用自定义过滤器

要在模板中使用自定义过滤器,需要在模板中加载自定义过滤器,并使用过滤器名称进行调用。在模板中加载自定义过滤器的方法是使用{% load %}
标签。以下是一个示例:

{% load my_filters %}

{{ "World" | add_hello }}

在这个示例中,{% load my_filters %}加载了名为my_filters.py的自定义过滤器模块,然后在{{ "World" | add_hello }}
中调用了自定义过滤器add_hello,将字符串"World"作为参数传递给该过滤器。

3. 过滤器的参数与返回值

自定义过滤器可以接受一个或多个参数,并可以返回任何类型的数据。在上面的示例中,add_hello
过滤器接受一个字符串参数,并返回一个带有"Hello, "前缀的新字符串。过滤器的参数可以是任意类型,包括字符串、数字、列表等。开发者可以根据需要自定义过滤器的参数和返回值,实现各种数据处理逻辑。

通过自定义过滤器,开发者可以扩展Django模板语言的功能,实现更复杂的数据处理和展示需求,提高代码的灵活性和可重用性。深入理解自定义过滤器的创建和使用方法,可以让开发者更好地定制模板渲染逻辑,满足不同场景下的需求。

深入自定义过滤器

1. 过滤器的多种应用场景

自定义过滤器在Django模板中有着广泛的应用场景,包括但不限于:

  • 文本处理:格式化文本,如添加前缀、后缀,或者进行大小写转换。
  • 数据转换:将数据从一种格式转换为另一种格式,例如将日期时间格式化。
  • 条件渲染:根据条件决定渲染的内容,例如显示不同的文本或HTML片段。
  • 国际化:根据当前语言环境显示不同的文本。
  • 数据聚合:对列表或对象集合进行聚合操作,如求和、平均等。

例如,可以创建一个过滤器来格式化货币:

@register.filter
def format_currency(value):
    return f"${value:,.2f}"

在模板中使用:

{{ 1234567.89 | format_currency }}

这将输出:$1,234,567.89

2. 过滤器的性能优化

为了确保自定义过滤器的高效运行,可以采取以下措施:

  • 避免复杂计算:过滤器应该执行快速操作,避免在模板渲染过程中进行复杂的计算或数据库查询。
  • 缓存结果:如果过滤器的结果不依赖于外部状态,可以考虑缓存结果以减少重复计算。
  • 使用内置过滤器:尽可能使用Django内置的过滤器,因为它们通常经过优化。
3. 过滤器的单元测试

为了确保自定义过滤器的正确性和稳定性,应该编写单元测试。使用Django的测试框架,可以轻松地对过滤器进行测试。以下是一个简单的测试示例:

from django.test import SimpleTestCase
from .templatetags.my_filters import format_currency


class FilterTests(SimpleTestCase):
    def test_format_currency(self):
        result = format_currency(1234567.89)
        self.assertEqual(result, '$1,234,567.89')

在这个测试中,我们使用SimpleTestCase来测试format_currency过滤器,确保它正确地格式化了货币值。

通过深入了解自定义过滤器的多种应用场景、性能优化和单元测试,开发者可以更有效地利用这一功能,提升Django项目的质量和用户体验。

自定义模板标签基础

1. 创建简单的自定义模板标签

在Django中,自定义模板标签允许开发者扩展模板系统的功能。创建一个简单的自定义模板标签通常涉及以下步骤:

  1. 创建模板标签目录:在应用目录下创建一个名为templatetags
    的目录,并在该目录下创建一个Python模块文件(例如my_tags.py)。
  2. 编写标签代码:在my_tags.py中定义标签。例如,创建一个简单的标签来显示当前时间:
from django import template
import datetime

register = template.Library()


@register.simple_tag
def current_time(format_string):
    return datetime.datetime.now().strftime(format_string)

在这个例子中,@register.simple_tag装饰器将函数current_time注册为一个模板标签。

2. 标签的注册与使用

注册标签后,可以在模板中使用它。首先,确保在模板中加载标签库:

{% load my_tags %}

然后,使用新定义的标签:

当前时间:{% current_time "%Y-%m-%d %H:%M:%S" %}

这将显示当前的日期和时间,格式为YYYY-MM-DD HH:MM:SS

3. 理解标签的上下文

模板标签可以访问当前模板上下文中的变量。这意味着标签可以基于模板中定义的变量来执行操作。例如,可以创建一个标签来根据某个条件显示不同的内容:

@register.simple_tag(takes_context=True)
def show_message(context):
    if 'user' in context and context['user'].is_authenticated:
        return "欢迎回来,用户!"
    else:
        return "请登录。"

在这个例子中,takes_context=True参数允许标签访问当前的模板上下文。标签检查user对象是否在上下文中,并根据用户的认证状态返回不同的消息。

在模板中使用这个标签:

{% show_message %}

根据上下文中的user对象,标签将显示不同的消息。

通过理解如何创建、注册和使用自定义模板标签,以及如何利用标签的上下文,开发者可以更灵活地控制和定制Django模板的行为。

高级自定义模板标签

1. 包含标签与继承标签

包含标签(Inclusion Tag)

  • 使用{% include %}标签可以将一个模板的一部分嵌入到另一个模板中。例如:
{% include 'partial_template.html' with variable_name=value %}

这会将partial_template.html中的内容插入到当前模板,其中variable_name会被value的值替换。

继承标签(Inheritance Tag)

  • Django的内置模板语言支持模板继承,但有时可能需要自定义的控制模板继承。这通常通过使用{% extends %}
    标签,但不直接是自定义标签。然而,可以创建一个包含继承逻辑的自定义函数,然后在模板中调用它。
@register.simple_tag
def custom_inherit(child_template, parent_template):
    # 在这里处理继承逻辑,如复制父模板内容并替换变量
    return render_to_string(parent_template, {'child_content': child_template_content})

在模板中使用:

{% custom_inherit 'child_template.html' 'parent_template.html' %}

2. 标签的参数与处理逻辑

参数处理

  • Django模板标签可以接受参数,这些参数在调用时传递给标签函数。例如,current_time标签可以接受一个格式字符串:
@register.simple_tag(takes_context=True)
def custom_format_time(context, format_string):
    return datetime.datetime.now().strftime(format_string)

在模板中使用时:

当前时间:{% custom_format_time "%Y-%m-%d %H:%M:%S" %}

逻辑处理

  • 标签的逻辑通常在标签函数内部,可以执行复杂的数据处理。例如,根据多个条件返回不同的输出:
@register.simple_tag
def check_status(status_list, condition):
    for status in status_list:
        if condition(status):
            return status
    return "未找到匹配的条件"

3. 标签的渲染与输出控制

渲染与输出

  • 标签的输出通常是HTML或其他格式的数据,但也可以是纯文本或其他数据类型。例如,current_time标签返回的是字符串。

输出控制

  • 有时可能需要更精细的控制输出,比如过滤或转换数据。可以使用内置的filtersafe选项。safe标志用于标记输出不应该被HTML转义:
@register.filter(is_safe=True)
def my_custom_filter(input_string):
    # 对字符串进行处理,例如去除空格
    return input_string.strip()

在模板中使用:

非转义输出:{{ my_variable | my_custom_filter }}

结合视图与模板标签

1. 视图与模板标签的交互

视图传递数据给模板标签

  • 在Django中,视图负责处理业务逻辑并将数据传递给模板。这些数据可以通过模板上下文处理器传递给模板标签。例如:
def my_view(request):
    data = get_my_data()
    return render(request, 'my_template.html', {'my_data': data})

在模板中使用这些数据:

{% load my_custom_tags %}
{% my_custom_tag my_data %}

模板标签调用视图逻辑

  • 有时,模板标签可能需要调用视图中的逻辑。这可以通过在模板标签中调用视图函数或方法来实现,但通常不推荐这样做,因为它可能导致逻辑混乱和维护困难。
2. 动态生成模板标签内容

动态内容生成

  • 模板标签可以根据视图传递的数据动态生成内容。例如,一个根据用户权限动态显示菜单的标签:
@register.inclusion_tag('menu.html', takes_context=True)
def dynamic_menu(context):
    user = context['user']
    permissions = user.get_all_permissions()
    return {'permissions': permissions}

menu.html中:

{% for permission in permissions %}
<li><a href="#">{{ permission }}</a></li>
{% endfor %}

3. 视图中的模板标签逻辑

在视图中使用模板标签

  • 虽然模板标签主要用于模板中,但有时可能需要在视图中使用模板标签逻辑。这可以通过直接调用模板标签函数来实现,但通常不推荐,因为它可能导致代码重复和逻辑不清晰。
    AD:漫画首页

示例

  • 假设有一个模板标签用于格式化日期,但在视图中需要使用相同的逻辑:
from django import template


def my_view(request):
    t = template.Template('{{ date_value|my_date_format }}')
    c = template.Context({'date_value': datetime.datetime.now()})
    formatted_date = t.render(c)
    return render(request, 'my_template.html', {'formatted_date': formatted_date})

这种方法虽然可行,但通常建议将这种逻辑封装在视图或模型方法中,以保持代码的清晰和可维护性。

通过结合视图和模板标签,可以创建出既灵活又强大的Web应用程序,有效地处理复杂的业务逻辑和用户界面需求。

实战案例分析

1. 案例一:博客系统的自定义标签与过滤器

自定义标签

  • 博客系统中可能需要自定义标签来实现文章摘要、分页等功能。例如,一个summary标签可以截断文章内容并添加读取更多的链接:
@register.simple_tag
def summary(value, length=200):
    return '{}...'.format(value[:length])

在模板中使用:

{% load my_custom_tags %}
<p>{% summary article.content %}</p>
<p><a href="{% url 'article_detail' article.id %}"></a></p>

自定义过滤器

  • 自定义过滤器可以用于格式化日期、计算评论数等。例如,一个count_comments过滤器可以计算文章的评论数:
@register.filter
def count_comments(value):
    return value.comment_set.count()

在模板中使用:

{% load my_custom_filters %}
<p>{{ article|count_comments }} comments</p>

2. 案例二:电商平台的商品展示优化

自定义标签

  • 电商平台可能需要自定义标签来实现商品推荐、排行榜等功能。例如,一个product_recommendation标签可以根据用户历史浏览记录推荐商品:
@register.inclusion_tag('product_recommendation.html', takes_context=True)
def product_recommendation(context):
    user = context['user']
    recommended_products = get_recommended_products(user)
    return {'recommended_products': recommended_products}

在模板中使用:

{% load my_custom_tags %}
{% product_recommendation %}

自定义过滤器

  • 自定义过滤器可以用于格式化价格、计算库存等。例如,一个format_price过滤器可以格式化价格:
@register.filter
def format_price(value):
    return '${:,.2f}'.format(value)

在模板中使用:

{% load my_custom_filters %}
<p>{{ product.price|format_price }}</p>

3. 案例三:社交网络的用户动态处理

自定义标签

  • 社交网络可能需要自定义标签来实现用户动态、关注列表等功能。例如,一个user_activity标签可以显示用户最近的动态:
@register.inclusion_tag('user_activity.html', takes_context=True)
def user_activity(context):
    user = context['user']
    activities = get_user_activities(user)
    return {'activities': activities}

在模板中使用:

{% load my_custom_tags %}
{% user_activity user %}

自定义过滤器

  • 自定义过滤器可以用于格式化时间、计算粉丝数等。例如,一个format_time过滤器可以格式化时间:
@register.filter
def format_time(value):
    return value.strftime('%Y-%m-%d %H:%M:%S')

在模板中使用:

{% load my_custom_filters %}
<p>{{ activity.time|format_time }}</p>

通过在实际案例中应用自定义标签和过滤器,可以使代码更加模块化和可维护,提高开发效率和应用的可扩展性。

性能优化与最佳实践

1. 模板标签与过滤器的性能考量
  • 模板标签和过滤器在处理大量数据时可能会影响性能。可以采用以下方法来优化:

    • 避免在模板中执行复杂的计算和逻辑。
    • 使用simple_taginclusion_tag代替assignment_tagtemplate_tag,因为前者在渲染模板时可以提高性能。
    • 使用缓存,将计算结果缓存在内存中,避免重复计算。
2. 代码组织与模块化
  • 将代码分成模块,按功能组织代码,可以提高可读性和可维护性。
  • 使用类和函数来封装逻辑,避免在视图函数中放入过多的代码。
  • 遵循DRY原则,避免重复代码。
  • 使用Django的app结构,将相关的代码放在同一个目录下。
3. 遵循Django社区的最佳实践
  • 使用Django的ORM来操作数据库,避免直接使用SQL语句。
  • 使用Django的内置验证机制,避免自己编写验证代码。
  • 使用Django的settings.py文件来配置应用,避免在代码中硬编码配置。
  • 使用Django的DEBUG模式来诊断问题,避免在生产环境中打印调试信息。
  • 使用Django的middleware来处理HTTP请求和响应,避免在视图函数中处理重复的逻辑。

测试与调试

1. 自定义模板标签与过滤器的测试策略
  • 对于自定义模板标签和过滤器,可以使用Django的TestCase类来编写测试用例。
  • 在测试用例中,可以通过django.template.context来模拟模板上下文,然后调用自定义标签和过滤器进行测试。
  • 可以使用assertTemplateUsedassertContains等方法来验证模板中是否正确使用了自定义标签和过滤器。
2. 使用Django测试框架进行测试
  • Django提供了unittest模块,可以用来编写测试用例。
  • 可以在应用目录下创建tests.py文件,编写测试用例。
  • 使用python manage.py test命令来运行测试,确保应用的各个部分都能正常工作。
3. 调试技巧与常见问题解决
  • 使用print()语句或logging模块来输出调试信息,帮助定位问题。
  • 使用Django的DEBUG模式,在出现异常时显示详细的错误信息。
  • 使用Django的pdb调试器,在代码中插入断点进行调试。
  • 可以使用django-debug-toolbar来查看请求的性能数据和SQL查询等信息。
  • 常见问题解决包括数据库连接问题、URL配置错误、模板语法错误等,可以通过查看日志和调试信息来解决。

通过良好的测试和调试策略,可以确保应用的稳定性和可靠性,及时发现并解决潜在问题,提高开发效率和用户体验。

部署与维护

1. 部署包含自定义模板标签与过滤器的Django应用
  • 在部署之前,确保所有的自定义模板标签和过滤器都已经在INSTALLED_APPS中注册。
  • 使用collectstatic命令收集所有静态文件到指定目录,以便于静态文件服务器的分发。
  • 确保服务器环境(如Nginx、Apache)配置正确,能够处理Django应用的请求。
  • 使用WSGI或ASGI服务器(如Gunicorn、uWSGI、Daphne)来运行Django应用。
  • 配置数据库连接,确保应用能够访问生产环境的数据库。
  • 使用migrate命令应用数据库迁移,确保数据库结构与应用代码同步。
2. 维护与更新自定义组件
  • 定期检查自定义组件的代码,确保其遵循最新的编码标准和最佳实践。
  • 根据用户反馈和业务需求,对自定义组件进行功能更新和性能优化。
  • 在更新自定义组件时,确保更新测试用例,以覆盖新功能和潜在的变更。
  • 使用版本控制系统(如Git)来管理自定义组件的版本,确保可以回溯历史版本。
3. 版本控制与文档编写
  • 使用版本控制系统来跟踪代码的变更,确保团队成员之间的协作顺畅。
  • 为自定义组件编写详细的文档,包括安装指南、使用方法、API参考等。
  • 定期更新文档,确保其与代码同步,帮助用户和开发者理解组件的功能和使用方法。
  • 使用自动化工具(如Sphinx、Read the Docs)来生成和发布文档。

附录

Django资源与社区
  • 官方文档:Django Documentation
  • AD:首页 | 一个覆盖广泛主题工具的高效在线平台
  • Django项目官网:Django Project
  • Stack Overflow:Django标签下的问题与解答
  • GitHub:Django的源码和社区贡献
  • Reddit:r/django社区讨论
  • AD:专业搜索引擎
  • Django Forum:Django Forum
  • Django Packages:Django Packages提供Django应用和工具的目录
常见问题解答
  1. **如何安装Django?**使用pip安装:pip install Django
  2. **如何创建一个新的Django项目?**使用命令行:django-admin startproject myproject
  3. **如何创建一个新的Django应用?**在项目目录下使用命令行:python manage.py startapp myapp
  4. **如何运行Django开发服务器?**在项目目录下使用命令行:python manage.py runserver
  5. **如何进行数据库迁移?**在项目目录下使用命令行:python manage.py makemigrationspython manage.py migrate
  6. **如何创建管理员用户?**在项目目录下使用命令行:python manage.py createsuperuser
  7. **如何调试Django应用?**使用Django的日志系统,或者在代码中添加print语句,也可以使用调试工具如Pdb。
参考文献与推荐阅读
  • 《Django for Beginners》 :Will Vincent著,适合初学者学习Django。
  • 《Two Scoops of Django》 :Daniel Greenfeld和Audrey Feldroy合著,提供了Django最佳实践和技巧。
  • 《Pro Django》 :Marty Alchin著,深入讲解Django的高级特性和开发技巧。
  • 《Python Web Development with Django》 :Jeff Forcier, Paul Bissex, Wesley Chun合著,全面介绍使用Django进行Web开发。
  • Django官方教程:Django官方教程,适合快速入门。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch 分析器的高级用法二(停用词,拼音搜索)

Elasticsearch 分析器的高级用法二&#xff08;停用词&#xff0c;拼音搜索&#xff09; 停用词简介停用词分词过滤器自定义停用词分词过滤器内置分析器的停用词过滤器注意&#xff0c;有一个细节 拼音搜索安装使用相关配置 停用词 简介 停用词是指&#xff0c;在被分词后的词…

巨亏22亿还能上市?瑞幸为何越亏越值钱?剖析资本破局的商业思维

瑞幸咖啡 18个月登上纳斯达克 13个月退市 19个月&#xff0c;粉单市场股价再次翻了8倍 这个技术性“上市”无常的产品是谁&#xff1f; 其实现在这个笑贫不笑娼的社会 如果我说&#xff1a;我们公司上市了&#xff0c;悲催又退市了。我朋友会说&#xff1a;工资没降吧?…

信创数据库有哪些?哪家好?堡垒机支持吗?

当今时代&#xff0c;数据已经成为了企业最宝贵的资产&#xff0c;因此数据库厂商也是不断增加。这不不少小伙伴在问&#xff0c;信创数据库有哪些&#xff1f;哪家好&#xff1f;堡垒机支持吗&#xff1f; 信创数据库有哪些&#xff1f; 1、达梦数据库 2、openGauss 3、人大…

Mac Pro中的开源虚拟机UTM安装ubuntu(Applce M1,M2芯片)(1)

UTM安装ubuntu&#xff08;Applce M1&#xff0c;M2芯片&#xff09;(2)链接: https://blog.csdn.net/qq_38382925/article/details/139158763?spm1001.2014.3001.5502 MacPro安装UTM 1 UTM 下载UTM虚拟机链接: https://mac.getutm.app/ 建议官网下载&#xff1a; 下载 U…

Codesys软件做EtherNET/IP主站与HT3S-EIS-MDN网关通讯步骤

Codesys软件做EtherNET/IP主站与HT3S-EIS-MDN网关通讯步骤 打开codesys软件&#xff0c;新建项目&#xff0c;选择标准项目进入界面后选择CODESYS Control Win v3 x64 &#xff0c;点击确定。 3.在桌面找到显示隐藏图标&#xff0c;找到如下图所示图标&#xff0c;右击在弹出…

查看bond接口详细信息

cat /proc/net/bonding/bondX 命令用于查看 Linux 系统中的网络绑定&#xff08;bonding&#xff09;接口的详细信息。在该命令中&#xff0c;bondX 是网络绑定接口的名称&#xff0c;其中 X 是数字&#xff0c;表示具体的网络绑定接口编号。 输出内容详解&#xff1a; 1. E…

java面试框架篇(Spring常见问题、SpringBoot、SpringMVC、mybatis经典问题、SpringCloud组件)

文章目录 面试专题-java框架篇1. spring常见问题1.1. spring是什么?1.2. 谈谈你对AOP的理解1.3. 谈谈你对IOC的理解1.4. Spring Boot、 Spring MVC和Spring有什么区别1.5. spring bean 生命周期1.6. spring事务传播机制有哪些?1.7. 循环依赖1.8. spring框架中使用了哪些设计模…

并网逆变器学习笔记9---VSG控制

参考文献&#xff1a;《新型电力系统主动构网机理与技术路径》 “构网技术一般包含下垂控制&#xff0c;功率同步控制&#xff0c;虚拟同步机控制&#xff0c;直接功率控制&#xff0c;虚拟振荡器控制 等。其中&#xff0c;虚拟同步机技术&#xff0c;即 VSG&#xff0c;因其物…

webgl开发家居设计软件

WebGL是一种在网页浏览器中渲染3D图形的JavaScript API&#xff0c;它基于OpenGL ES标准&#xff0c;允许开发者创建和显示交互式的3D图形。开发基于WebGL的家居设计软件可以为用户提供一种全新的、沉浸式的家居设计体验。以下是开发此类软件的一些关键步骤和特点。北京木奇移动…

【问题记录】QT“类型强制转换“:无法从“ATL::CString“转换为“LPCWSTR“

一&#xff0c;问题现象 环境&#xff1a;VS2019QT 报错提示&#xff1a;“类型强制转换”&#xff1a;无法从"ATL::CString"转换为"LPCWSTR" 二&#xff0c;解决方法 打开项目属性&#xff0c;设置字符集&#xff0c;如下所示&#xff1a;

某勾求职网逆向分析

搜索目标: aHR0cHM6Ly93d3cubGFnb3UuY29tL3duL2pvYnM/cG49MSZweD1kZWZhdWx0JmZyb21TZWFyY2g9dHJ1ZSZrZD0lRTYlOTUlQjAlRTYlOEQlQUUlRTUlODglODYlRTYlOUUlOTA= 抓包分析 请求和返回都是加密的 请求头部也有未知参数 跟栈分析 请求和返回是一个AES加密,加密的KEY是session s…

ruoyi前端获取用户信息

vue中获取当前用户信息 &#xff1a;头像&#xff0c;用户名&#xff0c;id&#xff0c;权限&#xff0c;token等 // 获取当前用户信息 用户名等var user this.$store.state.user;console.log("用户信息####", user);

DLRover:蚂蚁集团开源的AI训练革命

在当前的深度学习领域&#xff0c;大规模训练作业面临着一系列挑战。首先&#xff0c;硬件故障或软件错误导致的停机时间会严重影响训练效率和进度。其次&#xff0c;传统的检查点机制在大规模训练中效率低下&#xff0c;耗时长且容易降低训练的有效时间。资源管理的复杂性也给…

Nginx(负载均衡,反向代理)

1.什么是nginx Nginx&#xff08;“engine x”&#xff09;是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;**并发**能力强&#xff0c;事实上Nginx的并发能力确实在同类型的网页服务器中表现较好&#xff0c;中国大陆使用Nginx网站用户有&#…

Codeforces Round 943 (Div. 3)

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 Codeforces Round 943 (Div. 3) 题解 题目列表&#xff1a;https://codeforces.com/contest/1968 A https://codeforces.com/contest/1968/problem/A 题目大意 给…

【教学类-58-01】黑白三角拼图01(2*2宫格)256种

背景需求&#xff1a; 中班益智区素材&#xff1a;三角形变魔术 - 小红书自制益智区教玩具&#xff1a;三角形变魔术&#xff0c;共24题 玩法一&#xff1a;根据图示在空白格子里摆放。 玩法二&#xff1a;根据图示在空白格子里用黑笔涂。##自制玩具益智区 #幼儿园益智区 #中班…

Color预设颜色测试

"AliceBlue", "获取 ARGB 值为 的系统 #FFF0F8FF定义颜色。", "AntiqueWhite", "获取 ARGB 值为 的系统 #FFFAEBD7定义颜色。", "Aqua", "获取 ARGB 值为 的系统 #FF00FFFF定义颜色。", "Aquamarine"…

.NET File Upload

VS2022 .NET8 &#x1f4be;基础上传示例 view {ViewData["Title"] "File Upload"; }<h1>ViewData["Title"]</h1><form method"post" enctype"multipart/form-data" action"/Home/UploadFile"…

MacOS/Linux系统多Java环境切换

通常我们在进行Java项目开发时&#xff0c;会安装不同版本的JDK&#xff0c;那么这个时候又需要根据项目来使用不同的Java版本&#xff0c;那么怎么来切换昵 第一步&#xff1a; 首先找出系统中安装的所有版本的路径 /usr/libexec/java_home -V这里可以看出安装了三个java 版…

基础widgets

1.widgets_文本和字体 在flutter当中几乎所有的对象都是widget,他跟原生开发的控线不一样,flutter开发当中,widget的概念更广泛一点, 不仅可以表示ui元素,也可以表示一些功能性的组件,例如手势检测等 基础组件 文本和字体 对于html当中对应就是lab或者label或者span这样的行内元…