javascript - 如何通过 JavaScript 添加 Django 表单字段?
问题描述
我有一个这样的 Django 表单:
class CrawlRequest(models.Model):
tor_info = models.CharField(max_length=20)
我的看法是这样的:
def create_crawl(response):
context = {}
if response.method == "POST":
my_form = RawCrawlRequestForm(response.POST)
if my_form.is_valid():
new_crawl = CrawlRequestForm(my_form.cleaned_data)
new_crawl.save()
return render(response, "main/steps_creation.html", context)
else:
my_form = RawCrawlRequestForm()
context['form'] = my_form
return render(response, "main/create_crawl.html", context)
我有我的模板,其中有一个 Select 在更改时调用这样的 JavaScript 函数:
function detailIpRotationType(){
var ipSelect = document.getElementById("ip_type");
const ip_rotation_type = ipSelect.options[ipSelect.selectedIndex].value;
var extra_div = document.getElementById("ip_type_div");
if(ip_rotation_type == 'tor'){
extra_div.innerHTML = `
<input class="form-control" name="tor_info" id="tor_info" type="text" required/>
`
}
这工作正常,但我想将此输入元素更改为 {{ forms.tor_info }}。当我像在主模板中一样正常添加它时,它不会被识别为 Django 元素,而是变成文本。
有人知道我该怎么做吗?提前致谢。
解决方案
{{variables}} 和使用 (.innerHTML) 的脚本不能在一个文件中一起工作。如果你想使用 innerHTML 你应该把你的代码放在 js 文件中,然后将 id 引用到 html 文件。
如果要将 {{variables}} 和脚本放在一个文件中,则应使用隐藏的输入字段在 javascript 中获取值。
在 Django 这边,你返回什么?你返回了render(),还是你定义了一个函数?
也检查此链接,它可能会有所帮助:
https://adamj.eu/tech/2020/02/18/safely-including-data-for-javascript-in-a-django-template/
推荐阅读
- java - 从另一个类中的方法更改字段属性
- angular - 如何在 docker 中为 Angular 应用程序公开端口
- vue.js - vue.js Toast 未定义(使用 mint-ui 时)
- php - PHP - Laravel - Trait 方法标记尚未应用,因为与 App\User 上的其他 trait 方法存在冲突
- angular - 在 html datepicker 上动态设置 minDate/maxDate
- ms-access - 禁用与 Ms Access 中的表单连接的所有控件
- java - 更新代码以包含 wait.until 条件
- php - WordPress Inside Subapp Angular js 和 web api 在 IIS 中不起作用?
- c# - WPF MVVM:如何禁用单击的按钮并启用所有其他按钮?
- typescript - TypeScript:普通和不可变js对象的深度遍历