如何显示Django表单Textarea(models.TextField)的实时文本分析?

时间:2016-09-09 00:01:45

标签: jquery python django forms

好的,我有一个模型类AddRecipeForm和一个基于Recipevia forms.ModelForm)的表单类add_recipe.html

表单显示在我的html模板中并且有效,但我想实现一种特殊类型的表单验证。基本上,当用户输入他/她的成分/方向时,我想在一些大文本输入字段上进行一些文本处理。

我的代码可以确定成分文本中所有金额(数字)的位置,并对所有单位进行识别和分类(例如' lbs。'' gr'等等......) - >我希望能够在AJAX中的表单旁边基本上有一个文本框,可以实时执行此文本处理(通过突出显示,粗体等)。

但是,我真的不知道该怎么做。我一直在阅读有关通过jquerydjango,&n; django频道'或者仅仅ModelForm.clean()进行实时表单验证的信息。 class Recipe(models.Model): recipe_name = models.CharField(max_length=128, default='') description = models.CharField(max_length=1024) ingredients_text = models.TextField(max_length=2048*2) instructions_text = models.TextField(max_length=2048*4) 方法,但我不确定哪个最好或从哪里开始。任何指针/建议都很棒!

这是我的(简化)代码:

models.py

class AddRecipeForm(forms.ModelForm):
    class Meta:
        model = Recipe
        fields = '__all__'

forms.py

def add_recipe(request):

    if request.method == "POST":
        add_recipe_form = AddRecipeForm(request.POST)
        if add_recipe_form.is_valid():
            recipe = add_recipe_form.save()
            recipe.save()
            return HttpResponseRedirect('/recipes/detail/{}/'.format(recipe.id))
        else:
            return HttpResponse('Invalid values :( Try again?')
    else:
        add_recipe_form = AddRecipeForm()

    context = {
        'add_recipe_form': add_recipe_form,
    }

    return render(request, 'home/add_recipe.html', context)

views.py

{% extends "home/index.html" %}
{% block content %}
{% load materialize %}
    <h2> Add a Recipe </h2>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
    <div class="row">
        <p>{{add_recipe_form.ingredients_text|as_material:"s12 m6"}}</p>
        <div class="col s12 m6 textbox">  TODO (realtime validation textbox)  </div>
    </div>
    <div class="row">
        <p>{{add_recipe_form.instructions_text|as_material:"s12 m6"}}</p>
        <div class="col s12 m6 textbox"> TODO (realtime validation textbox) </div>
    </div>

        <input type="submit" value="Submit" class="waves-effect waves-light btn"/>
    </form>
{% endblock %}

home / templates / home / add_recipe.py(html模板)

旁注:我正在使用materialize框架,因此我使用小帮手进行表单,因此CSS与django没有冲突 - 如果需要我可以停止使用它虽然...

Baz

1 个答案:

答案 0 :(得分:1)

不要让Django的Form类参与进来,也不要担心django-channels。您只需要设置一个简单的API,它接受文本字段中任何内容的JSON并返回已处理文本的结果。 JavaScript将负责通过AJAX调用API并对响应做一些事情。

不是100%清楚你正在处理的文本,但如果你用“2 1/2”替换“两个半”的话,我可以看到服务器响应一个键值对{“两个半”:“2 1/2”}并允许JavaScript查找并替换该文本。