【问题标题】:JSignature Field Not Appearing in DjangoJSignature字段未出现在Django中
【发布时间】:2019-03-30 20:18:42
【问题描述】:

第一次在网站上发帖,先道歉,因为我是新手。

在 Visual Studio 中为一个类构建一个 Django 项目,并且需要一个签名表单才能出现在其中一个页面上。目前一直在关注本指南:https://pypi.org/project/django-jsignature/,但遇到了障碍,因为我只能在页面上显示一个保存按钮。下面我列出了我所拥有的。

forms.py

from django import forms

...

from jsignature.forms import JSignatureField

from jsignature.widgets import JSignatureWidget

...

class SignatureForm(forms.Form):

    signature = JSignatureField()

模板.html

{% extends "app/layout.html" %}

{% block content %}

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">

<head>

    <meta charset="utf-8" />

    <title></title>

</head>

<body>

    {{form.media }}

    <form action="." method="POST">

        {% for field in form %}

            {{ field.label_tag }}

            {{ field }}

        {% endfor %}

        <input type="submit" value="Save"/>

        {% csrf_token %}

    </form>

</body>

{% endblock %}

views.py

from jsignature.utils import draw_signature

from app.forms import SignatureForm

...

def signature(request):

    assert isinstance(request, HttpRequest)

    return render(

        request,

        'app/template.html',

        {

            'title':'About',

            'message':'Your application description page.',

            'year':datetime.now().year,

        }

    )

def my_view(request):

    form = SignatureForm(request.POST or None)

    if form.is_valid():

        signature = form.cleaned_data.get('signature')

        if signature:

            #as an image

            signature_picture = draw_signature(signature)

            #or as a file

            signature_file_path = draw_signature(signature, as_file=True)

再次,当我进入我的模板页面时,填充的只是一个单独的保存按钮。我已将其包含在我的布局 html 页面的正文中,因为我已经阅读过它可能是在页面上运行脚本时出现的问题,但仍然没有运气。

<script src="ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

谁能指出我正确的方向?希望我提供了足够的信息。

【问题讨论】:

    标签: python jquery django jsignature


    【解决方案1】:

    我遇到了同样的问题。我通过更改放置{{ form.media }} 的位置来修复它。 文档说要把它放在表单上方,我把它插入到我所有其他 JS 导入的下面。

    base.html

    .
    .
    .
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.bundle.min.js"</script>
    {% block extra_javascript %}{% endblock %}
    

    form-template.html

    {% extends "base.html" %}
    {% crispy form main_helper%}
    {% block extra_javascript %}
       {{form.media}}
    {% endblock %}
    

    【讨论】:

      【解决方案2】:

      我知道这是旧的,但我刚刚安装了 django-jsignature 并且遇到了同样的问题。我是 Django 新手,想将解决方案分享给那些也是 Django 新手并希望在他们的项目中使用 django-jsignature 的人。

      您必须检查一些事项。

      1. 首先,使用 Chrome,然后转到开发者工具。检查您的控制台,看看您是否有 Javascript 错误。如果这样做,则必须修改 2 个文件。

      你要修改的2个文件可以在https://github.com/fle/django-jsignature/pull/11/commits找到

      重新加载您的模板页面,看看您的页面上是否仍有 javascript 错误。 我正在使用 jQuery Core 3.4.1。这对我来说非常有用,没有错误。我已将 jquery 脚本链接放在我的 html 页面的头部。

      删除所有其他 javascript 依赖项,以确保它们不冲突。

      现在,如果您不再有 javascript 错误并且您仍然没有签名板,请转到第 2 步。

      1. 在 Chrome 中加载您的 html 模板并查看页面源代码。在你应该有签名部分的地方,你应该在表单中看到一个“隐藏”的 div。这意味着表单在 html 中正确加载,但您的 CSS 可能会导致此部分无法正确显示。

      如果是这种情况,请尝试创建一个新模板并在其中包含 jsignature 模板代码,而无需任何 CSS 来测试。

      1. 如果您在单击查看页面源代码时在签名模板 html 上没有看到“隐藏”的 div,则表示您的页面未正确呈现。

        一个。在您的views.py 中,确保在您的上下文中添加{'form': form }。该说明未包含在自述文件中。 例如:return render(request, 'your_signature_template.html', {'form': form }

        b.在您的 signature_template html 文件中,确保您的表单顶部有 {{ form.media }}

      【讨论】:

        【解决方案3】:

        完全按照 pypi 站点上的 django jsignature 教程中的内容进行操作,并确保模板的 head 标记中包含最新版本的 jquery。并且不要忘记将签名表单的空实例传递给您的渲染方法到您的模板

        我做了一个演示。结帐https://djsign.herokuapp.com 你可以在https://github.com/mnnlthmpsn/djsignature.git找到代码

        【讨论】:

          【解决方案4】:

          同样的问题,不同的解决方案:

          我尝试将符号字段嵌入到模式中,其中应显示和签署 AGB。 事先我确保签名字段会在只使用 fle 的示例案例加上我自己的带有标题和侧边栏的基础时正确显示。在那里,一切正常。

          当尝试将其嵌入到另一个页面(无论是否处于模态)时,Signaturefield 不会显示,但 DevTools (Chrome) 显示它已正确加载。

          我看到字段的大小属性是“高度”和“宽度”的“比率”,并将“高度”固定为 200 像素。然后一切正常。

          forms.py:

          from django import forms
          from .models import Signature
          from jsignature.widgets import JSignatureWidget
          from jsignature.forms import JSignatureField
          
          class SignatureForm(forms.ModelForm):
              signature = JSignatureField(widget=JSignatureWidget(jsignature_attrs={'color': '#e0b642', 'height': '200px'}))
              class Meta:
                  model = Signature
                  fields = ['signature']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-04-01
            • 2012-09-07
            • 2022-12-08
            • 1970-01-01
            • 2011-03-02
            • 1970-01-01
            • 2015-06-07
            相关资源
            最近更新 更多