django - 如何将函数名作为动态 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 是一个视图函数。是否有类似函数的数据类型?我真的不确定。
谢谢!
解决方案
推荐阅读
- ios - cordova-plugin-ionic-webview 在 iOS 中发送空源
- width - 我的网站宽度无法与手机屏幕匹配
- dart - 对齐警报对话框按钮栏小部件
- css - VSCode 在样式之间放置空行?
- android - mockito-kotlin 每当参数 - 指定为非 null 的参数为 null
- cassandra - 在 Cassandra cqlsh 中对数据进行分组并提取平均值
- php - 使用 PHP 显示目录内容时的特殊字符问题
- java - 如何从旧的 __jb_bak__ 或 __jb_old__ 文件恢复
- javascript - UnhandledPromiseRejectionWarning 尽管有多个 try/catch 块
- javascript - Try 正在执行,但 catch 没有缓存错误