首页 > 解决方案 > 如何将函数名作为动态 url 的参数传递?

问题描述

我正在尝试将函数作为参数传递给动态 URL。这是代码:

path('like/<str:view>', like_view, name='like')

然后我使用该视图变量对视图函数进行反向操作。

def like_view(request, view, *args, **kwargs):
    view = view
    post = Article.objects.get(id=request.POST.get('article_id'))
    post.likes += 1
    post.save()
    return HttpResponseRedirect(reverse(view))

def sac_view(request, *args, **kwargs):
    queryset = Article.objects.filter(committee="2")
    context = {
        "title" : "Student Academic Committee",
        "articles" : queryset,
        "view" : 'sac_view'
    }
    return render(request, 'c.html', context)

但是,它会引发一个错误,上面写着(不确定如何正确格式化它):

NoReverseMatch at /like/sac_view
Reverse for 'sac_view' not found. 'sac_view' is not a valid view function or pattern name.
Request Method: POST
Request URL:    http://127.0.0.1:8000/like/sac_view
Django Version: 3.1.3
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'sac_view' not found. 'sac_view' is not a valid view function or pattern name.
Exception Location: C:\Users\benja\anaconda3\lib\site-packages\django\urls\resolvers.py, line 685, in _reverse_with_prefix
Python Executable:  C:\Users\benja\anaconda3\python.exe
Python Version: 3.8.3
Python Path:    
['C:\\Users\\benja\\Desktop\\mysite\\mysite',
 'C:\\Users\\benja\\anaconda3\\python38.zip',
 'C:\\Users\\benja\\anaconda3\\DLLs',
 'C:\\Users\\benja\\anaconda3\\lib',
 'C:\\Users\\benja\\anaconda3',
 'C:\\Users\\benja\\anaconda3\\lib\\site-packages',
 'C:\\Users\\benja\\anaconda3\\lib\\site-packages\\win32',
 'C:\\Users\\benja\\anaconda3\\lib\\site-packages\\win32\\lib',
 'C:\\Users\\benja\\anaconda3\\lib\\site-packages\\Pythonwin']
Server time:    Mon, 04 Jan 2021 04:01:36 +0000
Traceback Switch to copy-and-paste view
C:\Users\benja\anaconda3\lib\site-packages\django\core\handlers\exception.py, line 47, in inner
                response = get_response(request) …
▶ Local vars
C:\Users\benja\anaconda3\lib\site-packages\django\core\handlers\base.py, line 179, in _get_response
                response = wrapped_callback(request, *callback_args, **callback_kwargs) …
▶ Local vars
C:\Users\benja\Desktop\mysite\mysite\blog\views.py, line 80, in like_view
    return HttpResponseRedirect(reverse(view)) …
▶ Local vars
C:\Users\benja\anaconda3\lib\site-packages\django\urls\base.py, line 87, in reverse
    return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) …
▶ Local vars
C:\Users\benja\anaconda3\lib\site-packages\django\urls\resolvers.py, line 685, in _reverse_with_prefix
        raise NoReverseMatch(msg) …
▶ Local vars

即使 sac_view 是一个视图函数。是否有类似函数的数据类型?我真的不确定。

谢谢!

标签: djangodjango-viewsdynamic-url

解决方案


推荐阅读