【问题标题】:Django - NoReverseMatch error not a valid function or patternDjango - NoReverseMatch 错误不是有效的函数或模式
【发布时间】:2017-12-24 16:52:37
【问题描述】:

错误是 Reverse for 'django_with_ocr.ocr.views.list' not found。 'django_with_ocr.ocr.views.list' 不是有效的视图函数或模式名称

此处的异常值不是有效的函数或模式名称。

还有一个错误'charmap' codec can't encode character '\ufb01' in position 843: character maps to

views.py

from django.shortcuts import render

from django.shortcuts import render

from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.urls import reverse

from .models import Document
from .forms import DocumentForm

from django.http import HttpResponse
import csv
import ipdb
from Cython.Compiler.Buffer import context

try:
        import Image
except ImportError:
        from PIL import Image
import pytesseract

global i
i = 0

def list(request):
    global i
    # Handle file upload
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Document(docfile=request.FILES['docfile'])
            newdoc.save()

            i += 1 
            # import ipdb;ipdb.set_trace()
            d = Document.objects.get(id=i)

            #print d.docfile
            k=pytesseract.image_to_string(Image.open(d.docfile))
            #print k
            handle = open('data.txt', 'a+')
            handle.write(k)
            handle.close()

            txt_file = r"data.txt"
            csv_file = r'mycsv.csv'

            in_txt = csv.reader(open(txt_file, "r"), delimiter = ' ')
            out_csv = csv.writer(open(csv_file, 'w', encoding='utf-8'))

            out_csv.writerows(in_txt)

            # Redirect to the document list after POST
            return HttpResponseRedirect(reverse('django_with_ocr.ocr.views.list'))
    else:
        form = DocumentForm()  # A empty, unbound form

    # Load documents for the list page
    documents = Document.objects.all()

    # Render list page with the documents and the form
    return render(request, 
        'list.html',
        {'documents': documents, 'form': form},
        context
    )

url.py

from django.urls import path
from . import views

urlpatterns = [
    path('list/', views.list,name='list' ),
]

list.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>OCR Converter</title>
    </head>

    <body>
        <!-- List of uploaded documents -->
        {% if documents %}
            <ul>
                {% for document in documents %}
                    <li><a href="{{ document.docfile.url }}">{{ document.docfile.name }}</a></li>
                {% endfor %}
            </ul>
        {% else %}
            <p>No documents.</p>
        {% endif %}

        <!-- Upload form. Note enctype attribute! -->
        <form action="{% url 'list' %}" method="post" enctype="multipart/form-data">
            {% csrf_token %}
            <p>{{ form.non_field_errors }}</p>

            <p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>

            <p>
                {{ form.docfile.errors }}
                {{ form.docfile }}
            </p>

            <p><input type="submit" value="Upload"/></p>
        </form>
    </body>

</html>

项目的网址是

from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url
from django.conf import settings
from django.conf.urls.static import static
from django.views.generic import RedirectView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('ocr/', include('ocr.urls')),
    path('', RedirectView.as_view(url='/ocr/list/', permanent=True)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【问题讨论】:

    标签: django


    【解决方案1】:

    你在打电话

    return HttpResponseRedirect(reverse('django_with_ocr.ocr.views.list'))
    

    您只需通过其应用名称和网址名称调用该网址(假设ocr 是您的应用名称)

    return HttpResponseRedirect(reverse('ocr:list'))
    

    编辑

    添加

    app_name = 'ocr'
    
    urlpatterns = [
        path('list/', views.list,name='list' ),
    ]
    

    【讨论】:

    • 我已经更新了HttpResponseRedirect(reverse('ocr:list')。这次的错误是“NoReverseMatch at /ocr/list/”。'ocr'不是注册的命名空间
    • @nithinpathak 我用应该可以工作的代码更新了我的问题。我假设您发布的第一个 urls.py 位于名为 ocr 的应用程序中,您应该在问题中澄清这一点。
    猜你喜欢
    • 1970-01-01
    • 2018-11-29
    • 2019-04-21
    • 2020-11-22
    • 2019-02-15
    • 2019-08-13
    • 1970-01-01
    • 2021-08-02
    • 2019-05-19
    相关资源
    最近更新 更多