config_load的属性

本文深入探讨了如何使用配置文件加载数据,并结合条件判断实现动态页面生成,具体包括配置文件的基本属性、加载方式及作用域,以及如何利用条件判断进行内容展示。
     
属性类型是否必须缺省值描述
filestringYesn/a 待包含的配置文件的名称
sectionstringNon/a 配置文件中待加载部分的名称
scopestringnolocal 加载数据的作用域,取值必须为local, parent 或 global. local 说明该变量的作用域为当前模板. parent 说明该变量的作用域为当前模板和当前模板的父模板(调用当前模板的模板). global 说明该变量的作用域为所有模板.
globalbooleanNoNo 说明加载的变量是否全局可见,等同于 scope=parent. 注意: 当指定了 scope 属性时,可以设置该属性,但模板忽略该属性值而以 scope 属性为准。


if.conf

#全局变量
bgcolor = #00ffff
display = true            // 主要起限制作用

[mycolor]
bgcolor = #cccc00


[yourcolor]
bgcolor = #123456

if.html

<body>
<form action="if_else.php" method="post">
<input type="text" name="text" />
<input type="radio" name='dq' value="left" />left
<input type="radio" name='dq' value="right" />right
<input type="radio" name='dq' value="center" />center<br />
<input type="submit" value="提交" />

</form>
</body>

if.php

<?php
       
      include 'libs/Smarty.class.php';
      
    
      $link = mysql_connect('localhost','root','123') or die('数据库连接失败');
      mysql_select_db('ecshop_test',$link);
      mysql_query("set names utf8");

      $sql = mysql_query("select * from brand where id like '".$_POST['text']."'");
      $result = mysql_fetch_row($sql);
      
      
      $smarty = new Smarty();
      $smarty->template_dir="demo/templates";
      $smarty->compile_dir="demo/templates_c";
      $smarty->config_dir="demo/config";
      $smarty->left_delimiter="<{";
      $smarty->right_delimiter="}>";
      $smarty->assign('text',$result);
      $smarty->assign('dq',$_POST['dq']);
      $smarty->display('if_else.tpl');


if.tpl

<{config_load file='if.conf' section='mycolor'}>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>if_else</title>
</head>

<body bgcolor=<{ #bgcolor# }>>
<{ if #display# }>        //如果display=true,则执行以下代码
<{ if $dq=='left'}>
<div style=" float:left;">
<table>
<tr>
<{ foreach from=$text item=value }>
<td><{ $value }></td>
<{ /foreach }>
</tr>
</table>
</div>
<{ elseif $dq=='right'}>
<div style=" float:right;">

<table>
<tr>
<{ foreach from=$text item=value }>
<td><{ $value }></td>
<{ /foreach }>
</tr>
</table>
</div>
<{else}>
<center><div>
<table>
<tr>
<{ foreach from=$text item=value }>
<td><{ $value }></td>
<{ /foreach }>
</tr>
</table>
</div></center>
<{/if}>

<{ else }>                       //如果display不等于true ,则执行以下代码
没有显示
<{/if}>
</body>
</html>


# core/config.py import os import json import logging from pathlib import Path from typing import Dict, Any, Optional, Union import hashlib import sys class CoreConfig: """核心配置管理器 - 完全修复版""" def __init__(self, config_path: Union[str, Path] = None, env_prefix: str = "", default_config: Dict = None): # 1. 直接存储基本属性 self.env_prefix = env_prefix self.config_path = Path(config_path) if config_path else None self.default_config = default_config or {} self._config = {} self._last_hash = None # 2. 确定基础目录(不依赖属性访问) self.BASE_DIR = self._determine_base_dir() # 3. 初始化基本配置 self._config = { 'BASE_DIR': str(self.BASE_DIR), 'LOG_DIR': str(self.BASE_DIR / "logs"), 'CONFIG_DIR': str(self.BASE_DIR / "config"), 'CACHE_DIR': str(self.BASE_DIR / "cache"), 'DATA_DIR': str(self.BASE_DIR / "data"), 'MODEL_DIR': str(self.BASE_DIR / "models"), } # 4. 初始化日志器 self.logger = self._create_safe_logger() # 5. 完成初始化 self._initialize() self.logger.info("✅ 配置管理器初始化完成 | 环境前缀: %s | 基础目录: %s", self.env_prefix, self.BASE_DIR) def _determine_base_dir(self) -> Path: """确定基础目录(安全无递归)""" # 1. 尝试环境变量 base_dir_env = os.getenv(f"{self.env_prefix}BASE_DIR") if base_dir_env: return Path(base_dir_env).resolve() # 2. 尝试文件位置 try: return Path(__file__).parent.parent.resolve() except Exception: return Path.cwd().resolve() # 3. 默认当前目录 return Path.cwd().resolve() def _create_safe_logger(self) -> logging.Logger: """创建安全的日志器(Windows兼容)""" logger = logging.getLogger('CoreConfig') logger.setLevel(logging.INFO) # 安全控制台处理器 class SafeConsoleHandler(logging.StreamHandler): def emit(self, record): try: msg = self.format(record) safe_msg = msg.encode('utf-8', errors='replace').decode('utf-8') self.stream.write(safe_msg + self.terminator) self.flush() except Exception: self.handleError(record) console_handler = SafeConsoleHandler() formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', '%Y-%m-%d %H:%M:%S' ) console_handler.setFormatter(formatter) logger.addHandler(console_handler) return logger def _initialize(self): """初始化配置流程""" try: self._load_environment() if self.config_path and self.config_path.exists(): self._load_config_file() elif self.config_path: self.logger.warning("⚠️ 配置文件不存在: %s", self.config_path) self._merge_defaults() self._create_directories() self.logger.info("✅ 配置加载完成 | 条目数: %d", len(self._config)) except Exception as e: self.logger.error("❌ 配置初始化失败: %s", str(e)) def _load_environment(self): """加载环境变量到配置""" self.logger.info("🔄 加载环境变量...") for key, value in os.environ.items(): if key.startswith(self.env_prefix): config_key = key[len(self.env_prefix):].lower() self._config[config_key] = value self.logger.debug("加载环境变量: %s = %s", config_key, value) # 其他方法保持不变... def __getattr__(self, name: str) -> Any: """安全属性访问方法""" # 1. 检查配置字典 if name in self._config: return self._config[name] # 2. 检查嵌套属性 (key.subkey) if '.' in name: parts = name.split('.') current = self._config for part in parts: if isinstance(current, dict) and part in current: current = current[part] else: break else: # 所有部分都存在 return current # 3. 尝试直接访问实例属性 try: return object.__getattribute__(self, name) except AttributeError: # 4. 抛出明确异常 raise AttributeError( f"属性 '{name}' 在 {type(self).__name__} 对象中不存在" ) from None E:\AI_System\web_ui>python server.py 2025-08-12 04:19:38 - CoreConfig - INFO - 🔄 加载环境变量... 2025-08-12 04:19:38 - CoreConfig - ERROR - ❌ 配置初始化失败: 属性 '_load_config_file' 在 CoreConfig 对象中不存在 2025-08-12 04:19:38 - CoreConfig - INFO - ✅ 配置管理器初始化完成 | 环境前缀: AI_SYSTEM_ | 基础目录: E:\AI_System Traceback (most recent call last): File "E:\AI_System\web_ui\server.py", line 53, in <module> from core.config import CoreConfig as SystemConfig File "E:\AI_System\core\__init__.py", line 37, in <module> level=system_config.get("logging.level", "INFO"), File "E:\AI_System\core\config.py", line 137, in __getattr__ raise AttributeError( AttributeError: 属性 'get' 在 CoreConfig 对象中不存在
08-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值