html - Django REST 可浏览 API 模板更改
问题描述
我想自定义 Django REST Framework Browsable API 模板(只需将品牌更改为不同的名称和链接)。
我已阅读有关如何实现此目的的文档,并最初在以下路径中执行了以下操作:hints(project)->hints1(app)->templates->rest_framework->api.html
api.html:
{% extends "rest_framework/base.html" %}
{% block title %} Handy Dev Hints - API {% endblock %}
{% block branding %}
<span>
<a class='navbar-brand' rel="nofollow" href="{% url 'html' %}">
-----HTML View----- <span class="version">1</span>
</a>
</span>
{% endblock %}
我还修改了我的 settings.py 如下,特别是 DIRS 部分:
设置.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR, os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
从我看过的教程和我阅读的文档来看,这应该足以实现更改。但是,它没有用。
因此,我决定直接在站点包库中更改 base.html。
base.html:
<!DOCTYPE html>
.
.
.
{% block body %}
<body class="{% block bodyclass %}{% endblock %}">
<div class="wrapper">
{% block navbar %}
<div class="navbar navbar-static-top {% block bootstrap_navbar_variant %}navbar-inverse{% endblock %}"
role="navigation" aria-label="{% trans "navbar" %}">
<div class="container">
<span>
{% block branding %}
<a class='navbar-brand' rel="nofollow" href="{% url 'html' %}">
-----HTML View-----
</a>
{% endblock %}
当我在本地服务器上运行该解决方案时,该解决方案有效。但是,当我将文件上传到外部服务器时它不起作用(我也将rest_framework
和rest_framework_jwt
站点包上传到外部服务器,但我认为我仍然缺少一些东西)。
关于如何按照文档的建议使更改在外部服务器上工作的任何建议?甚至通过 base.html 更改方法?(或任何其他方法)。
非常感谢!
解决方案
有几件事可能是您遇到此问题的原因:
1)首先,当您在项目目录级别引用模板文件夹时,您似乎在您的应用文件夹中创建了您的 api.htm 文件,这意味着
[您的应用模板参考] Proj dir --> app --> 模板 --> api.html
[django 模板查找] Proj dir --> 模板 --> api.html导致错误
2)其次,作为替代解决方案,您选择破解站点包安装(非常糟糕!不推荐)虽然这可以在本地工作,但当您在外部服务器上部署应用程序时,DRF 将重新安装在外部服务器中(这不会有您所做的任何修改)
推荐的行动方案将是:
1) 将您的api.htm移动到项目级文件夹 .ie Proj dir --> templates --> api.html
{% extends "rest_framework/base.html" %}
{% block title %} Handy Dev Hints - API {% endblock %}
{% block branding %}
<span>
<a class='navbar-brand' rel="nofollow" href="{% url 'html' %}">
-----HTML View----- <span class="version">1</span>
</a>
</span>
{% endblock %}
让 django 轻松找到
或
2)您将os.path.join('BASE_DIR', 'YOUR_APP_DIR' , 'templates')添加到设置中的模板目录。即
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR, os.path.join(BASE_DIR, 'YOUR_APP_DIR', 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
更新:
如果我可以补充一点,只要所有内容都放在适当的路径中以便框架可以找到,遵循关于如何自定义它的教程就可以工作,这里是一个缺少我所做的自定义的屏幕。
推荐阅读
- pyspark - 调用 df.show() 函数时出现“引发 EOFError”
- javascript - 如何在提交之前更改 FormData?
- javascript - ( panzoom )如何阻止图像平移出视图?
- python - 按日期查找值并将它们相加
- azure - 将 Azure AppInsights `timestamp` 转换为 `datetime`
- laravel - 许多 web/ios/android 应用程序连接到同一个 Laravel Passport 身份验证
- bash - 带有浮点数的 Bash For 循环
- c# - 如何将变量传递给新的 js 文件函数
- image-processing - c# EmguCV 版本 4.1.0.3420 中缺少类/单词
- javascript - 无法将 Vuetify 项目更新为 Vuetify 2.0.0-beta5