template 中有个websocket 需要获取 配置文件中的 ip 和port
from django.apps import AppConfig
from selenium import webdriver
import json
class myappConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "myapp"
config_file_path = r'.\config.json'
with open(config_file_path, 'r', encoding='utf8') as fp:
opt = json.load(fp)
print('[INFO] mysite Config:', opt['mysite'])
opt_site = opt['mysite']
IP = opt_site['IP']
在 templates 的html 中应该如果获取到这个ip 以便 js 中可以连接呢?
var IP = "{% ??这块应该咋写 %}"
var ws = new WebSocket(IP);
注意,这个 IP属于配置项 ,我认为不通过render 的方式进行传入比较好吧,是否有哪个对象可以直接读取?
在视图函数中获取到配置文件中的 IP 和端口,通过 Django 模板语言将它们传递给你的模板。具体操作步骤:
from django.shortcuts import render
import json
def your_view_function(request):
config_file_path = r'.\config.json'
with open(config_file_path, 'r', encoding='utf8') as fp:
opt = json.load(fp)
opt_site = opt['mysite']
IP = opt_site['IP']
return render(request, 'your_template.html', {'IP': IP})
要将 'your_template.html'
替换为实际模板的名称,而 your_view_function
则应替换为你实际的视图函数名称。
2. 在 HTML 模板中,用 Django 模板语言获取 IP。
var IP = "{{ IP }}";
var ws = new WebSocket(IP);
上面的 "{{ IP }}"
语句就是 Django 模板语言中的变量标记,它将被替换为从视图函数传递过来的 IP
值。
这样,你就可以在模板中使用配置文件中的 IP 了。
在Django中,默认情况下,你不能直接在HTML页面中调用settings.py中的变量。这是出于安全和设计的考虑,以避免将敏感信息暴露给客户端。如果你不想使用render方法将参数传递至前端页面,那么可以使用以下方法:
首先在你应用的settings.py里设置你的变量,比如:
SITE_IP = "192.168.0.100"
你可以使用你自己的变量名和变量值
在应用中新建一个python文件: context_processors.py
from django.conf import settings
def custom_settings(request):
custom_context ={
'IP': settings.SITE_IP
}
return custom_context
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# ...
'yourapp.context_processors.custom_settings',
],
},
},
]
确保将yourapp替换为你自己的应用程序名称。
可以在 views.py 中将 IP 变量传递给 template ,然后在 template 中通过变量名获取 IP 值。
假设在 views.py 中有如下代码:
from django.shortcuts import render
from myapp.apps import myappConfig
def my_view(request):
IP = myappConfig.IP
return render(request, 'my_template.html', {'IP': IP})
在 template 中可以这样获取 IP 值:
var IP = "{{ IP }}";
然后就可以用 IP 变量来连接 WebSocket 了。
var IP = "{% myapp.IP%}";
var ws = new WebSocket(IP);