我正在尝试制作一个日历html页面,该页面具有一个下拉按钮以选择不同的月份。如何通过在nav bar
base.html
进入此日历页面
base.html -如何访问日历页面。
....
....
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" data-target="scheduler_dropdown" href="#"><i class="fas fa-calendar"></i>Scheduler</a>
<div class="dropdown-menu" aria-labelledby="scheduler_dropdown">
<a class="dropdown-item" href="{% url 'view_schedule' %}"><i class="fas fa-calendar-alt"></i>View Schedule</a>
</div>
</li>
到目前为止我已经建立了什么:
urls.py
urlpatterns = [
path('schedule/view-schedule/', views.view_schedule, name='view_schedule'),
path('schedule/view-schedule/?query=month<str:selected_month>', views.view_schedule,
name='view_schedule_selected_month'),
]
Views.py
def view_schedule(request, selected_month=None):
if request.method == 'POST':
print('post')
else:
current_month = date.today().month
current_year = date.today().year
# a = request.GET # How to get query set from dropdown menu???
# print(a)
args = {
'month_cal': monthcalendar(current_year, current_month),
'month_name': calendar.month_name[current_month],
'year_name': current_year,
}
return render(request, 'static/html/view_schedule.html', args)
view_schedule.html
<div class="card-header">
Schedule for {{ month_name }} {{ year_name }}
<form class="date-selector" method="post">
{% csrf_token %}
<div class="dropdown">
<button class="btn dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="far fa-caret-square-down"></i>
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href={% url 'view_schedule_selected_month' selected_month=1 %}>Jan</a>
<a class="dropdown-item" href={% url 'view_schedule_selected_month' selected_month=2 %}>Feb</a>
<a class="dropdown-item" href={% url 'view_schedule_selected_month' selected_month=3 %}>Mar</a>
</div>
</div>
</form>
</div>
我的问题是,当我单击下拉按钮并选择相关月份Jan, Feb, Mar
时,URL会更改,但是在我的views.py
中,查询集不会出现。因此,我无法提取查询进行处理。
有什么想法吗?
答案 0 :(得分:0)
结果证明我可以完成print(selected_month)
,它将打印查询结果。.当我观看此视频时,我有了一个主意:https://www.youtube.com/watch?v=qmxoGYCFruM
答案 1 :(得分:0)
请勿使用urlpatterns
处理查询字符串。 urlpatterns
仅处理URL本身;查询参数是GET数据的一部分,并在回调方法中处理。您需要更改HTML urlpatterns
和视图的工作方式以适应这种情况。
urlpatterns = [
path('schedule/view-schedule/', views.view_schedule, name='view_schedule'),
]
在您的HTML中,您需要一个带有下拉菜单的表单,该表单将数据获取到上面的URL。您可以为此使用the select tag。
然后在视图中,您可以从request.GET
中提取GET数据。具体来说,如果您按照上述建议使用了select
标签,那么用户的选择将在request.GET[NAME]
中,其中NAME是select
标签的名称。
根据美学偏好等,还有其他解决方法,但是我上面已经解释过的方法可能是最简单的。
此外,查询集(或QuerySet)在Django中具有非常特定的含义。它是指数据库查询as explained here中使用的一种对象。 HTML表单的结果不是“查询集”。