Python Django呈现和重定向URL

Python Django呈现和重定向URL,python,django,redirect,Python,Django,Redirect,您好,我是Django的新手,我目前在如何重定向和返回值方面遇到了问题 我有一个带有两个参数的url,分别是月和年。点击它之后,它应该重定向到带有url的页面,如“列出工作会话/年/月”,带有基于操作的年和月参数 url.py url(r'^list-working-sessions/(?P<year>\w+?)/(?P<month>\w+?)/$', views.list_working_sessions, name='list_wo

您好,我是Django的新手,我目前在如何重定向和返回值方面遇到了问题

我有一个带有两个参数的url,分别是。点击它之后,它应该重定向到带有url的页面,如“列出工作会话/年/月”,带有基于操作的年和月参数

url.py

url(r'^list-working-sessions/(?P<year>\w+?)/(?P<month>\w+?)/$', 
        views.list_working_sessions, 
        name='list_working_sessions')
编辑: 我将base.html改为

{% now "Y" as YEAR %}
{% now "m" as MONTH %}
<a href="{% url 'list_working_sessions' year=YEAR month=MONTH %}">
base.html中的URL返回右重定向URL“/list working sessions/2019/7/”和表中的值,但使用表单搜索时,URL不同

Page not found (404)
Request Method: GET
Request URL:    http://localhost:8888/list_working_sessions_get?month=8&year=2019

似乎无法从该URL获取月份和年份到我的查看功能

年份和月份可能是一个数值,请尝试下面的方法

list-working-sessions/(?P[\w\d]+?)/(?P[\w\d]+?)/$

您需要更新视图以传递年份和月份参数:

def list_working_sessions(request, year, month):
    flag_date = []
    working_session_list = []

    if request.method == 'GET':
        # removed request.GET.get(...) because year and month arguments coming direct in from url and view arguments
        daily_working_sessions = WorkingSession.objects.filter(device__employee_id=request.user,start__month=month,start__year=year).order_by('-start')
    else:
        month = datetime.today().month
        year = datetime.today().year
def列表工作会话(请求、年份、月份):
标志_日期=[]
工作会话列表=[]
如果request.method==“GET”:
#已删除request.GET.GET(…),因为年和月参数直接来自url和视图参数
每日工作会话=工作会话.objects.filter(设备\u员工\u id=请求.user,开始\u月=月,开始\u年=年)。订购人('-start')
其他:
月=日期时间.今天().月
年=日期时间.今天().年

更新我想你可以这样尝试:

# url
url(r'^list-working-sessions/', 
    views.list_working_sessions, 
    name='list_working_sessions')

# view(same as your question)
def list_working_sessions(request):
    flag_date = []
    working_session_list = []

    if request.method == 'GET':
        month = int(request.GET.get('month'))
        year = int(request.GET.get('year'))
    # rest of the code
    url = '{}?year={}&month={}'.format(reverse('list_working_sessions'), year, month)

# template:
{% now "Y" as YEAR %}
{% now "m" as MONTH %}
<a href="{% url 'list_working_sessions' %}?year={{ YEAR }}&month={{ MONTH }}">
# url
url(r'^list-working-sessions/', 
    views.list_working_sessions, 
    name='list_working_sessions'),
url(r'^list-working-sessions/(?P<year>\w+?)/(?P<month>\w+?)/$', 
    views.list_working_sessions, 
    name='list_working_sessions_updated')

# view
def list_working_sessions(request, year=None, month=None):
    flag_date = []
    working_session_list = []
    redirect = False
    if request.method == 'GET':
        if not month:
            month = int(request.GET.get('month'))
            redirect = True
        if not year:
            year = int(request.GET.get('year'))
            redirect = True
    # other codes
    if not redirect:
         return render(...)
    else:
         url = reverse('list_working_sessions_updated', kwargs={'year': year, 'month': month})
         return HttpResponseRedirect(url)


# template:
{% now "Y" as YEAR %}
{% now "m" as MONTH %}
<a href="{% url 'list_working_sessions_updated' year=YEAR month=MONTH %}">
#url
url(r“^list working sessions/”,
views.list\u工作会话,
name='list\u working\u sessions')
#查看(与您的问题相同)
def列表工作会话(请求):
标志_日期=[]
工作会话列表=[]
如果request.method==“GET”:
month=int(request.GET.GET('month'))
year=int(request.GET.GET('year'))
#代码的其余部分
url='{}?年={}&month={}'。格式(反向('list_working_sessions'),年,月)
#模板:
{%现在“Y”为年份%}
{%m现在作为月份%}

更新2我想你可以这样尝试:

# url
url(r'^list-working-sessions/', 
    views.list_working_sessions, 
    name='list_working_sessions')

# view(same as your question)
def list_working_sessions(request):
    flag_date = []
    working_session_list = []

    if request.method == 'GET':
        month = int(request.GET.get('month'))
        year = int(request.GET.get('year'))
    # rest of the code
    url = '{}?year={}&month={}'.format(reverse('list_working_sessions'), year, month)

# template:
{% now "Y" as YEAR %}
{% now "m" as MONTH %}
<a href="{% url 'list_working_sessions' %}?year={{ YEAR }}&month={{ MONTH }}">
# url
url(r'^list-working-sessions/', 
    views.list_working_sessions, 
    name='list_working_sessions'),
url(r'^list-working-sessions/(?P<year>\w+?)/(?P<month>\w+?)/$', 
    views.list_working_sessions, 
    name='list_working_sessions_updated')

# view
def list_working_sessions(request, year=None, month=None):
    flag_date = []
    working_session_list = []
    redirect = False
    if request.method == 'GET':
        if not month:
            month = int(request.GET.get('month'))
            redirect = True
        if not year:
            year = int(request.GET.get('year'))
            redirect = True
    # other codes
    if not redirect:
         return render(...)
    else:
         url = reverse('list_working_sessions_updated', kwargs={'year': year, 'month': month})
         return HttpResponseRedirect(url)


# template:
{% now "Y" as YEAR %}
{% now "m" as MONTH %}
<a href="{% url 'list_working_sessions_updated' year=YEAR month=MONTH %}">
#url
url(r“^list working sessions/”,
views.list\u工作会话,
name='list\u working\u sessions'),
url(r'^列出工作会话/(?P\w+?)/(?P\w+?)/$),
views.list\u工作会话,
name='list\u working\u sessions\u updated')
#看法
def列表工作会话(请求,年=无,月=无):
标志_日期=[]
工作会话列表=[]
重定向=错误
如果request.method==“GET”:
如果不是一个月:
month=int(request.GET.GET('month'))
重定向=真
如果不是一年:
year=int(request.GET.GET('year'))
重定向=真
#其他代码
如果没有重定向:
返回渲染(…)
其他:
url=reverse('list\u working\u sessions\u updated',kwargs={'year':year','month':month})
返回HttpResponseRedirect(url)
#模板:
{%现在“Y”为年份%}
{%m现在作为月份%}

不起作用,似乎我在视图中编写了错误的函数,它没有正确处理条件。我在编辑问题时更改了条件,它起作用了,当单击base.html中的url时,得到了默认的月份和年份url,但当我尝试使用表单GET搜索时,我没有找到以下url页面(404)请求方法:获取请求URL:似乎我无法从我的视图中的表单获取URL获取参数否,您需要匹配URL签名。但是您可以像回答中的更新部分一样尝试在/list working sessions/list_working_sessions()中输入TypeError缺少两个必需的位置参数:base.html url中的“month”和“year”,它无法获得月和年的值?很好,它工作了,但url现在是“/list working sessions/?month=8&year=2019”,这不是我在视图中编写的重定向url格式应该是“/list working sessions/2019/8”,是否仍有更改?我会接受这个答案,因为它帮助了我的代码流工作:)嗯,它没有改变我的url,看起来url='{}?月={}&年={}。格式(反向('list_working_session'),月,年)返回HttpResponseRedirect(url)部分甚至没有使用
# url
url(r'^list-working-sessions/', 
    views.list_working_sessions, 
    name='list_working_sessions')

# view(same as your question)
def list_working_sessions(request):
    flag_date = []
    working_session_list = []

    if request.method == 'GET':
        month = int(request.GET.get('month'))
        year = int(request.GET.get('year'))
    # rest of the code
    url = '{}?year={}&month={}'.format(reverse('list_working_sessions'), year, month)

# template:
{% now "Y" as YEAR %}
{% now "m" as MONTH %}
<a href="{% url 'list_working_sessions' %}?year={{ YEAR }}&month={{ MONTH }}">
# url
url(r'^list-working-sessions/', 
    views.list_working_sessions, 
    name='list_working_sessions'),
url(r'^list-working-sessions/(?P<year>\w+?)/(?P<month>\w+?)/$', 
    views.list_working_sessions, 
    name='list_working_sessions_updated')

# view
def list_working_sessions(request, year=None, month=None):
    flag_date = []
    working_session_list = []
    redirect = False
    if request.method == 'GET':
        if not month:
            month = int(request.GET.get('month'))
            redirect = True
        if not year:
            year = int(request.GET.get('year'))
            redirect = True
    # other codes
    if not redirect:
         return render(...)
    else:
         url = reverse('list_working_sessions_updated', kwargs={'year': year, 'month': month})
         return HttpResponseRedirect(url)


# template:
{% now "Y" as YEAR %}
{% now "m" as MONTH %}
<a href="{% url 'list_working_sessions_updated' year=YEAR month=MONTH %}">