有或没有蓝图的两种语言 Flask 站点

2024-03-28

我只想为两种语言运行 Flask Web 应用程序,我尝试过:

from flask import Flask, Blueprint, g

app = Flask(__name__)
bp = Blueprint('frontend', __name__, url_prefix='/<lang_code>')

@bp.url_defaults
def add_language_code(endpoint, values):
    values.setdefault('lang_code', g.lang_code)

@bp.url_value_preprocessor
def pull_lang_code(endpoint, values):
    g.lang_code = values.pop('lang_code')

@bp.route('/')
def hello():
    return 'Hello ' +'!'

@bp.route('/about')
def about():
    return 'Hello ' + '!'

app.register_blueprint(bp, url_defaults={'lang_code': 'en'})


if __name__ == '__main__':
    app.run()

我的目标是拥有英语和格鲁吉亚语两种语言的网站。

我还需要知道在哪里添加另一种语言以及如何在 HTML 模板中切换语言?


from flask import Flask, Blueprint, g, redirect, request, \
    session, abort, render_template, url_for, Response, make_response
import datetime



app = Flask(__name__, template_folder='../templates')
main = Blueprint('main', __name__, url_prefix='/<lang_code>')

app.url_map.strict_slashes = False

app.secret_key='p9uyg7yuwriwjigjergkrgrrrr'

app.config['SUPPORTED_LANGUAGES'] = {'ka': 'Georgian', 'en': 'English'}

translation_list = [{ 'name': 'anytrans',
                   'ka': 'ქარ',
                   'en': 'Eng'},
                    { 'name': 'any',
                   'ka': 'რამე',
                   'en': 'Any'},
                    ]


@main.before_request
def ensure_lang_support():
    lang_code = g.get('lang_code', None)
    session['lang_code'] = lang_code
    if lang_code and lang_code not in app.config['SUPPORTED_LANGUAGES'].keys():
        ''' fix for unsupported lang inserted '''
        session['lang_code'] = '/ka/'
        g.lang_code = 'ka'
        return abort(404)

@main.context_processor
def inject_language():
    return dict(sess_lang=g.lang_code)

@main.url_defaults
def add_language_code(endpoint, values):
    if 'lang_code' in values or not g.get('lang_code', None):
        return
    if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
        values['lang_code'] = g.lang_code

@main.url_value_preprocessor
def pull_lang_code(endpoint, values):
    g.lang_code = values.pop('lang_code')

@main.route('/change/<new_lang_code>', methods=['POST','GET'])
def change(new_lang_code):
    response = make_response(session["lang_code"])
    session['lang_code'] = new_lang_code
    response.set_cookie('lang_code', new_lang_code)
    return response

@main.after_request
def set_lang_cookie(response):
    response.set_cookie('lang_code', g.lang_code)
    return response

@main.context_processor
def inject_translations():
    return dict(translations=get_translation())


def get_translation():
    lang = g.lang_code
    translations = {}
    for trans in translation_list:
        translations.update({trans['name']:trans[lang]})
    return translations


@main.route('/')
def index():
    return render_template('index.html')

@main.route('/home/hale/')
def home():
    url = url_for('main.index')
    return render_template('index.html')

@app.route('/')
def redir():
    lang = request.cookies.get('lang_code',None)
    if lang:
        return redirect('/'+ lang + '/')
    else:
        return redirect('/ka/')

    if __name__ == '__main__':
        app.run()


{% extends 'html/base.html'  %}

{% block body%}

    <script type="text/javascript">
        function change_lang(id){
            $.get('/{{sess_lang}}/change/'+id, function(data){
                var pathname = window.location.pathname.split( '/' );
                var newPathname = "";
                for (i = 2; i < pathname.length; i++) {
                    newPathname += "/";
                    newPathname += pathname[i];
                }
                window.location.href = '/'+ id + newPathname
            });
        }

    </script>

{% if sess_lang =='ka' %}
    <p>{{sess_lang}}</p>

    <p onclick='change_lang(id)' id="en" >change</p>

{% else %}
    <p>{{sess_lang}}</p>
     <p onclick='change_lang(id)' id="ka" >change</p>
{% endif %}

<div class="rame">
    <a href="/">Home</a>
    <a href="/{{sess_lang}}/home/hale/">Home</a>
</div>


{% endblock %}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有或没有蓝图的两种语言 Flask 站点 的相关文章

  • Python包不安装子模块

    我在 dev 分支中创建了一个具有以下结构的包 在验证包安装正确之前不会合并到 main mypackage init py setup py requirements txt module py subpackage one init p
  • 为什么Python有最大递归深度?

    Python有最大递归深度 但没有最大迭代深度 为什么递归受到限制 把递归当成迭代来对待 而不限制递归调用的次数不是更自然吗 我只想说这个问题的根源来自于尝试实现流 参见这个问题 https stackoverflow com questi
  • python中热图的层次聚类

    我有一个 NxM 矩阵 其值范围为 0 到 20 我可以使用 Matplotlib 和 pcolor 轻松获得热图 现在我想使用 scipy 应用层次聚类和树状图 我想重新排序每个维度 行和列 以显示哪些元素相似 根据聚类结果 如果矩阵是方
  • ValueError:“连接”层需要具有匹配形状的输入(连接轴除外)

    我正在尝试为我的项目构建 Pix2Pix 并收到错误 值错误 Concatenate层需要具有匹配形状的输入 除了连接轴之外 获得输入形状 None 64 64 128 None 63 63 128 生成器是一个 U 网模型 我的输入高度
  • 将打开关闭的 Google Chrome 浏览器添加到 Selenium linkedin_scraper 代码中

    我正在尝试抓取一些知名人士的 LinkedIn 个人资料 该代码获取一堆 LinkedIn 个人资料 URL 然后使用Selenium and scrape linkedin收集信息并将其作为 json 文件保存到文件夹中 我遇到的问题是
  • 创建一个打开文件并创建字典的函数

    我有一个正在处理的文件 我想创建一个读取文件并将内容放入字典中的函数 然后该字典需要通过 main 函数传递 这是主程序 它无法改变 我所做的一切都必须与主程序配合 def main sunspot dict file str raw in
  • 有条件填写 pandas 数据框

    我有一个数据框df列中包含浮点值A 我想添加另一列B这样 B 0 A 0 for i gt 0 B i if np isnan A i then A i else Step3 B i if abs B i 1 A i B i 1 lt 0
  • 通过鼻子测试检查某个函数是否发出警告

    我正在使用编写单元测试nose http somethingaboutorange com mrl projects nose 0 11 2 我想检查函数是否引发警告 该函数使用warnings warn 这是很容易就能做到的事情吗 def
  • Django 如何从 ManyToManyField 序列化并列出全部

    我正在使用 Django 1 9 1 开发移动应用程序后端 我实现了关注者模型 现在我想列出用户的所有关注者 但目前我不得不这样做 我还使用 Django Rest 框架 这是我的 UserProfile 模型 class UserProf
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 在加载“cv2”二进制扩展期间检测到递归

    我有一个小程序 在 pyinstaller 编译后返回 opencv 错误 但无需编译即可工作 我在 Windows 10 上使用 Python 3 8 10 Program 导入 pyautogui将 numpy 导入为 np导入CV2
  • Python 字典 - 在 2 个字符的字符串中查找第二个字符,该字符产生最小值

    我想提交密钥的第一部分并返回该密钥的剩余部分 以最小化值 并从第一部分开始 例如 d ab 100 ac 200 ad 500 如果我要进去 a I would like to return b min d s s for s in d i
  • Pandas Pivot_Table :非数字值的行计算百分比

    这是我在数据框 df 中的数据 Document Name Time SPS2315511 A 1 HOUR SPS2315512 B 1 2 HOUR SPS2315513 C 2 3 HOUR SPS2315514 C 1 HOUR S
  • Pyinstaller --onefile 警告文件已存在但不应存在

    跑步时Pyinstaller onefile 并开始得到结果 exe 会出现多个弹出窗口 并显示以下警告 WARNING file already exists but should not C Users myuser AppData L
  • 如何使用 jira-python 设置 fixVersions 字段

    我正在尝试使用 jira python 模块 http jira python readthedocs org en latest 更新现有的 JIRA 具体来说 我正在尝试设置问题的fixesVersion 列表 我已经尝试了一段时间但没
  • PyQt - 如何检查 QDialog 是否可见?

    我有个问题 我有这个代码 balls Ball for i in range 1 10 因此 当我说 Ball 时 这将在 QDialog 上绘制一个球 然后当这完成后 我正在移动球QDialog无限循环中 我想说类似的话while QDi
  • 从 csv 中读取 pandas 数据帧,以非固定标头开始

    我有许多数据文件是由我的实验室中使用的一些相当黑客的脚本生成的 该脚本非常有趣 因为它在标头之前附加的行数因文件而异 尽管它们具有相同的格式并具有相同的标头 我正在编写一个批处理来将所有这些文件处理为数据帧 如果我不知道位置 如何让 pan
  • 如何使用 Python 将我的 GoPro Hero 4 相机直播连接到 openCV?

    我在尝试从我的新 GoPro Hero 4 相机捕获实时流并使用 openCV 对其进行一些图像处理时遇到麻烦 这是我的试用 创建的窗口上没有显示任何内容 import cv2 import argparse import time imp
  • 如何动态创建 Luigi 任务

    我正在为 Luigi Tasks 构建一个包装器 但遇到了一个障碍Register http luigi readthedocs io en stable modules luigi task register html Register该
  • 在读/写二进制数据结构时访问位域

    我正在为二进制格式编写一个解析器 这种二进制格式涉及不同的表 这些表同样采用二进制格式 通常包含不同的字段大小 其中 50 100 个之间 大多数这些结构都有位域 并且在 C 语言中表示时看起来像这样 struct myHeader uns

随机推荐