Я создаю сайт с 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