我有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 )
`