XH_Digital_Management/tool/views_generator.py

116 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
import shutil
def generate_view_code(view):
module = view['module']
view_name = view['name']
view_func = view['name'] + '_view'
template = view['template']
model = view['model']
filter_order = view['filter_order']
form_action_url = view['form_action_url']
filters = view['filters']
breadcrumb_list = view['breadcrumb_list']
table_columns = view['table_columns']
show_modify_button = view['show_modify_button']
show_add_button = view['show_add_button']
show_download_button = view['show_download_button']
show_upload_button = view['show_upload_button']
filter_conditions = "\n ".join([
f"if request.GET.get('{f['name']}', ''):\n query_set = query_set.filter({f['name']}__icontains=request.GET.get('{f['name']}', ''))"
for f in filters])
query_params_assignments = "\n ".join([f"{f['name']} = request.GET.get('{f['name']}', '')" for f in filters])
query_params_string = " + ".join([f"'&{f['name']}={{}}' + format({f['name']})" for f in filters])
view_code = f"""
def {view_func}(request):
# 声明查询集
query_set = {model}.objects.filter().order_by('-{filter_order}')
# 获取查询参数
{query_params_assignments}
# 根据提供的参数进行筛选
{filter_conditions}
# 对查询结果进行分页每页10条记录
items = paginate_query_and_assign_numbers(
request=request,
queryset=query_set,
per_page=10
)
# 构建上下文查询参数字符串
query_params = {query_params_string}
# 准备上下文
context = {{
'items': items,
'filters': {json.dumps(filters, ensure_ascii=False)},
'form_action_url': '{form_action_url}',
'breadcrumb_list': {json.dumps(breadcrumb_list, ensure_ascii=False)},
'query_params': query_params,
'table_columns': {json.dumps(table_columns, ensure_ascii=False)},
'show_modify_button': {show_modify_button},
'show_add_button': {show_add_button},
'show_download_button': {show_download_button},
'show_upload_button': {show_upload_button},
}}
return render(request, '{module}/{template}', context)
"""
return view_code
def copy_template(path):
source_html = 'comom_list.html' # 修改为实际模板文件路径
destination_html = path
shutil.copy(source_html, destination_html)
def add_url_pattern(view):
view_name = view['name']
urls_path = view['urls_path']
view_def = view['name'] + '_view'
url_pattern = f" path('{view_name}/', {view_def}, name='{view_name}'),\n"
with open(urls_path, 'r', encoding='utf-8') as file:
content = file.readlines()
for index, line in enumerate(content):
if line.strip() == "urlpatterns = [":
content.insert(index + 1, url_pattern)
break
with open(urls_path, 'w', encoding='utf-8') as file:
file.writelines(content)
def main_func():
config_file = 'config.json'
with open(config_file, 'r', encoding='utf-8') as file:
config = json.load(file)
content = ['asset_mgnt', 'pjt_mgnt']
for key, value in config.items():
if key in content:
for view in value:
view_code = generate_view_code(view)
insert_file_path = view['insert_file_path']
with open(insert_file_path, 'a', encoding='utf-8') as file:
file.write(view_code)
# Copy template file and rename
html_file_path = view.get('html_file_path')
copy_template(html_file_path)
add_url_pattern(view)
if __name__ == '__main__':
main_func()