在Django视图函数中是否有创建持久变量的方法?

在Django视图函数中是否有创建持久变量的方法?,django,django-views,Django,Django Views,当调用my view函数时,我当前通过GET获取一个变量'my_var',如图所示。我需要在POST方法中使用此变量进行查询 def article_delete_view(request, pk): my_var = request.GET.get('my_var') #GET THE VARIABLE from referring data-url obj = Listing.objects.get(type=type) # I could query here if I w

当调用my view函数时,我当前通过GET获取一个变量
'my_var'
,如图所示。我需要在POST方法中使用此变量进行查询

def article_delete_view(request, pk):
    my_var = request.GET.get('my_var') #GET THE VARIABLE from referring data-url
    obj = Listing.objects.get(type=type) # I could query here if I wanted (illustration only)
    article = get_object_or_404(Article, pk=pk)
    data = dict()
    if request.method == 'POST':
        article.delete()
        data['form_is_valid'] = True
        articles = Article.objects.all()
        obj = Listing.objects.get(name=my_var) #THIS DOES NOT WORK, since 'type' is not passed on submit.
        context = {'articles':articles, 'obj':obj}
        data['article_table'] = render_to_string('article_table.html', context)
    else:
        context = {'article':article}
        data['html_form'] = render_to_string('article_delete.html', context, request=request)
    return JsonResponse(data)
在提交时调用POST时,是否有最佳实践方法使该变量保持不变?我知道宣布一项全球计划是个坏主意。曾考虑将其写入内存(附在文章中),但这感觉像是一次黑客攻击。将其附加到
pk
参数,然后将其拆分,感觉更糟。讨厌。我可以让我的
方法传递
我的_var
,但要做到这一点,我必须重构许多其他东西才能实现。django会话变量就是答案吗?任何观点都是有帮助的。提前谢谢

更新和解决方案:

因此,为了上下文化,这里的问题是,我想在一个视图中查询一个特定的模型实例,该视图没有将该模型实例信息(pk或id)作为参数传递给它。我可以通过触发视图的
数据url
获取该变量,但只能获取一次。它在
POST
中不可用,或者在以后调用
article\u delete\u view
时不可用

想象一下,你正试图做一个花生酱三明治,但你一次只能从碗橱里取出一件东西。你第一次去橱柜时就得到了花生酱,但是当你再次打开橱柜去拿面包时,花生酱就消失了。会话变量原来是一种节省花生酱的解决方案,你知道,就像一个小架子。滚动的有轮子的架子。无论如何:

def article_delete_view(request, pk):
    my_var = request.GET.get('my_var')
    if my_var is not None: #This prevents my_var from being lost subsequent function calls
        request.session['session_var'] = my_var = request.GET.get('my_var') # create session variable
    else:
        pass
    article = get_object_or_404(Article, pk=pk)
    data = dict()
    if request.method == 'POST':
        article.delete()
        data['form_is_valid'] = True
        articles = Article.objects.all()
        session_var = request.session.get('session_var', None) # grab the session variable here
        obj = Listing.objects.get(name=session_var) # NOW THIS WORKS!
        context = {'articles':articles, 'obj':obj}
        data['article_table'] = render_to_string('article_table.html', context)
    else:
        context = {'article':article}
        data['html_form'] = render_to_string('article_delete.html', context, request=request)
    return JsonResponse(data)
获取my_var之后的
if
可以防止会话变量在每次后续调用视图时被写入null,因为
GET
只在第一次获取变量。如果有人想知道
session\u var
实际上来自何处,那么下面是源代码(obj.slug):

名称

我使用GET从它在范围内的模板中获取它,因此我可以在
文章\u delete\u视图中查询它。将其作为URL参数传入不起作用,因为该模式与我的应用程序中的任何内容都不匹配。到目前为止,这是伟大的工作。如果有人有任何其他想法和/或可以告诉我为什么这是个坏主意,请发布。

类型是python内置的,不要使用类型作为变量名。
request.GET
是一个类似字典的对象,包含所有给定的HTTP GET参数,也称为查询参数。这不是一种方法<代码>请求。GET
也可用于post请求。Type不是实际变量。我会编辑。我最终用会话变量解决了这个问题,效果很好。但是,仍然希望有人能发布其他想法。你能用问题描述中的会话作为更新发布你所做的吗?
<button type="button" data-url="{% url 'article_delete' article.id %}?my_var={{obj.slug}}">Name</button>