Проблемы с Django URL с помощью Regex - PullRequest
0 голосов
/ 15 февраля 2019

Я создаю сайт с Django и сочетанием других технологий.Мне удалось настроить Django и заставить обычные URL-адреса (с «путем») работать с функциями в представлениях.Однако мне не очень повезло с URL-адресами регулярных выражений.

Шаблон, который я ищу, выглядит следующим образом:

filings/AAPL/10-K/d17062d10k.htm

Имена файлов также могут содержать "-", например:

filings/AAPL/10-K/a10-k20179302017.htm/

Изпуть, я ищу для передачи символа (AAPL), тип подачи (10-K) и имя файла для просмотра.Вот шаблоны, которые я пытался безрезультатно:

from django.urls import path, re_path
from django.conf import settings
from django.conf.urls.static import static

from . import views

urlpatterns = [
...
...

path('filings/<slug:symbol>/<slug:filingType>/', views.filingsByGivenTypeForSymbol, name='filingsByGivenTypeForSymbol'),
# ex: /polls/filings/<SYMBOL>/<Filing_Type>/<fileName.htm>

path('path', views.viewFilingPath, name='viewFilingPath'),

re_path(r'^filings/<slug:symbol>/<slug:filingType>/(?P<slug>[\w.]*)/$', views.viewFiling, name='viewFiling'),
re_path(r'^filings/<slug:symbol>/<slug:filingType>/(?P<slug>[\w]*[.htm]+)/$', views.viewFiling, name='viewFiling'),
re_path(r'^filings/<slug:symbol>/<slug:filingType>/(?P<slug>[-\w.]*)/$', views.viewFiling, name='viewFiling'),
re_path(r'^filings/<slug:symbol>/<slug:filingType>/(?P<slug>[-\w]*[.htm]+)/$', views.viewFiling, name='viewFiling'),

re_path(r'^filings/<slug:symbol>/<slug:filingType>/(?P<fileName>[\w]*)\.(?P<fileExt>[\w]*)/$', views.viewFiling, name='viewFiling'),
re_path(r'^filings/<slug:symbol>/<slug:filingType>/(?P<fileName>[-\w]*)\.(?P<fileExt>[\w]*)/$', views.viewFiling, name='viewFiling'),        

] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Вот функция в представлениях, измененная совсем недавно для последних двух записей в URL для re_path:

def viewFiling(request, symbol, filingType, fileName, fileExt):
    baseDir = "INTENTIONALLY TAKEN OUT For Posting"
    path = os.path.join(baseDir, symbol, filingType, fileName, ".", fileExt)
    if os.path.exists(path) and os.path.isfile(path):
        f = open(path, 'r')
        file_content = f.read()
        f.close()
        if file_content == "":
            return HttpResponse("File contents empty.")
        else:
            return HttpResponse(file_content, content_type="text/plain")
    else:
        return HttpResponse("File not found.")

Я понимаю,что я использую по умолчанию / опросы, которые мне нужно изменить.Наконец, urlpatterns в корне указывает на URL в опросах:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('polls/', include('polls.urls')),
]

Параметры пути без регулярных выражений из того же файла url работают нормально.Я проверил другие подобные публикации на Django re_path, а также проверил некоторые примеры в github, но этот шаблон не работает в моей локальной установке.Буду признателен за любую помощь в этом отношении.GET терпит неудачу, как следует с 404 всегда:

[15/Feb/2019 15:05:20] "GET /polls/filings/AAPL/10-K/a10-k20179302017.htm HTTP/1.1" 404 5621
...