首页 > 解决方案 > 如何通过 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 元素,而是变成文本。

有人知道我该怎么做吗?提前致谢。

标签: javascripthtmldjangodjango-formsdjango-templates

解决方案


{{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/


推荐阅读