django - Django:如何制作编辑 JSON 文件而不是模型的自定义管理视图?
问题描述
我的目标是向我的管理页面添加一个额外的视图来编辑 json 文件,而不是我的数据库。文档说可以通过覆盖我的自定义类中的方法来添加自定义get_urls()
视图AdminSite
。它接着说:
您呈现的任何使用管理模板或扩展基本管理模板的视图都应
request.current_app
在呈现模板之前设置。如果self.name
您的视图位于 a 上,AdminSite
或者self.admin_site.name
您的视图位于ModelAdmin
.
正如您在此处看到的,我尝试这样做(参见json_admin_view()
方法的第一行):
import json
from django.contrib.admin import AdminSite
from django.urls import path
from django.shortcuts import render
from .forms import JsonForm
JSON_FILE = 'json_app/data.json'
class MyAdminSite(AdminSite):
site_header = "JSON App Administration"
def get_urls(self):
urls = super().get_urls()
my_urls = [
path('json_admin/',
self.admin_view(self.json_admin_view),
name='json_admin')
]
return my_urls + urls
def json_admin_view(self, request):
request.current_app = self.name # This doesn't seem to do anything
context = {}
with open(JSON_FILE, 'r') as read_data:
json_data = json.load(read_data)
if request.method == 'POST':
form = JsonForm(request.POST)
if form.is_valid():
with open(JSON_FILE, 'w') as write_data:
json.dump(form.cleaned_data, write_data)
context.update({'form_saved': True})
else:
form = JsonForm({
'fname': json_data['fname'],
'lname': json_data['lname'],
})
context.update({'form': form})
return render(request, 'json_app/admin/json_admin.html', context)
我可以访问/admin/json_admin/
,它工作正常,除了标题显示“Django Administration”而不是“JSON App Administration”,即使json_admin.html
extends admin/base_site.html
。另外,我想在管理索引页面上显示一个指向视图的链接,就好像它是一个普通的模态更改表单一样。所以我有两个问题:
- 为什么我在自定义管理页面的标题上没有看到“JSON 应用程序管理”?我认为
request.current_app = self.name
是为了帮助解决这个问题,但也许我使用不正确。 - 如何从管理索引添加指向自定义管理页面的链接?如果它是我可以使用的模型
register()
,但我不能这样做,因为它不是模型。
如果您知道从管理页面编辑 json 文件的更好方法,我也很乐意听到。
解决方案
推荐阅读
- python - Python Dataframe根据现值条件选择最后n行
- swift - 以最简单的形式在 map() 中应用 KeyPath
- r - 为什么我必须在闪亮的 ggplot 中使用 aes_string()?
- reactjs - 反应 setState 覆盖数组状态
- html - 如何将 JSON 数据保存在 List 中?角 8
- php - Laravel 7 中未呈现的异常(改为超时)
- python - 如何对 ANN 的 X 和 y 值进行 OneHotEncode?
- android - ScrollView 未将所有组件显示到手机屏幕
- python-3.x - Kivy:长图未显示
- 2d - Node2D旋转不相对于父级