如何构建适用于HTML形式作用的Django的URL



我有Django站点,我可以使用各种参数组合查询。我正在尝试编写HTML表格,以选择诸如So的各种组合:

<form action="http://mydjangosite.com/summaryReports/" target="_blank">
  <input type="radio" name="reportType" value="messageSummary" checked> messageSummary<br>
  <input type="radio" name="reportType" value="countSummary"> countSummary<br>
  <select name="period">
    <option value="today">Today</option>
    <option value="yesterday">Yesterday</option>
    <option value="thisWeek">This Week</option>
    <option value="lastWeek">Last Week</option>
    <option value="thisMonth">This Month</option>
    <option value="lastMonth">Last Month</option>
  </select>
<br>
  <input type="radio" name="reportFormat" value="html" checked> html<br>
  <input type="radio" name="reportFormat" value="pdf"> pdf<br>
  <input type="radio" name="reportFormat" value="csv"> csv<br>
  <input type="radio" name="reportFormat" value="email"> email<br>
  <input type="radio" name="reportFormat" value="debug"> debug<br>
  <input type="submit" value="Submit">
</form>

按下按钮时,生成的URL为:

mydjangosite.com/summaryReports/?reportType=messageSummary&period=today&reportFormat=html

我需要的是:

mydjangosite.com/summaryReports/messageSummary/today/html

如何做?

预先感谢

为此,您需要一个视图来处理所选选项的视图,以及一个会对模式做出反应的URL,因此,您的视图(应该是相关的(到/summaryReports/将做类似的事情:

from django.shortcuts import redirect
def rewrite_the_url(request):
    return redirect('your_app:actual_reports', **request.GET.dict())

现在,此处的URL定义很重要,因为您的视图将传递到它的所有参数,因此您需要:

url(r'/summaryReports/(?P<reportType>[^./]+)/(?P<period>[^./]+)/(?P<reportFormat>[^./]+)/', views.actual_reports, name='actual_reports')

然后,应将actual_reports声明为:

def actual_reports(request, reportType, period, reportFormat):
    #return something

请记住,URL代表您的应用程序的状态,它不是一种装饰措施,用户可以简单地更改URL的参数并期望发生变化,我们在这里所做的就是重写URL来更改我们的内容作为查询字符串到URL,作为您选择的Django或UWSGI服务器,对重写不关心,就像您期望使用的是用户Apache Mod_rewrite的系统,即服务器技术,而不是应用程序框架。

from django.conf.urls import url, include
from sellerProfile import views
urlpatterns = [
    url(r'^summaryReports'+'/(?P<reportType>[w-]+)'+'/(?P<period>[w-]+)'+'/(?P<reportFormat>[w-]+)/$', views.summaryReportHtml, name="summaryReports")
]

您必须在urls.py中创建urlpattern,并且在View.py文件中必须获得类似的值。

@csrf_exempt
@token_required
def summaryReports(request, reportType, period, reportFormat):
    if request.method == 'GET':
        print(reportType, period, reportFormat)

我做了这样的事情:

def reportGenerator(request):
    if request.method == 'GET':
        QryDict = request.GET
    else:
        QryDict = request.POST
    reportType = QryDict.get('reportType', 'rawRecords')
    period = QryDict.get('period', 'today')
    reportFormat = QryDict.get('reportFormat','html')
    newURL = '/summaryReports/' + reportType + '/' + period + '/' + reportFormat + '/'
    return redirect( newURL )

`

最新更新