Django将变量作为参数传递给vi中的函数

2024-09-30 18:20:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里要做的是将变量result传递给一个模板。我的问题是我需要将变量path作为参数传递给tumor_classification()函数,以获得result的值。'path'的值是从save()函数获得的,因为我重写了它。我试图使变量path为全局变量,但它不起作用(“path”仍为null)。我该怎么做?以下代码显示了我的views.py文件:

from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.views.generic import FormView, DetailView, ListView
from django.conf import settings

import os

from .forms import BrainImageForm
from .models import BrainImage
from .brain import *

global result

class BrainImageView(FormView):
    template_name = 'brain_image_form.html'
    form_class = BrainImageForm
    def form_valid(self, form):


        brain_image = BrainImage(
            image = self.get_form_kwargs().get('files')['image']
        )

        brain_image.save()
        global path
        path = brain_image.save() # this is the variable I need to pass to the function tumor_classification() below

        self.id = brain_image.id

        return HttpResponseRedirect(self.get_success_url())

    def get_success_url(self):

        return reverse('brain_image',kwargs = {'pk': self.id})

class BrainImageIndexView(ListView):

    model = BrainImage
    template_name = 'brain_image_view.html'
    context_object_name = 'images'

    def tumor_classification(image_address):

            path = settings.MEDIA_ROOT+'/'+image_address
            img = selectImage(path)
            segmented = segmentation(img)
            replaced = replace(img, segmented)
            extractFeatures(replaced)
            classif = createSVMClassifier(settings.BASE_DIR+'/main/datasets/input_features.csv', settings.BASE_DIR+'/main/datasets/benign_input_features.csv')
            result = classify(classif, "tumor_features.csv")

            return result   

    result = tumor_classification(path) # this is where I need to pass the 'path' variable
    queryset = BrainImage.objects.all()

谢谢你!在


Tags: pathdjangofromimageimportselfformget
2条回答

如果path是短时间内所需的内容,则可以将其存储在会话中。请参阅sessions manual以获取参考。会话是与当前登录用户相关联的内容。在

request.session.put('path', path)

request.session.get('path', default='something)

但是,如果用户将多次调用创建BrainImage的视图,则session中的路径值将被覆盖(global也是如此)

处理这个问题的最佳方法是将path存储在数据库中,例如在您的BrainImage中。这样,您可以在其他视图中以线程安全、多用户安全以及更重要的持久性方式检索它。在

通常,这是通过重写视图中的get_context_data方法来完成的,因此:

def get_context_data(self, **kwargs):
    context = super(BrainImageIndexView, self).get_context_data(**kwargs)
    context["result"] = self.something()
    return context

但是你想要的似乎有些不同,你应该在你的模型定义中移动def tumor_classification(image_address):,改变签名以从对象本身获取图像地址,而不是作为参数,然后在模板中执行类似的操作

^{pr2}$

模型中的方法示例:

class BrainImage(models.Model):
    ....
    def tumor_classification(self):
        image_address = self.image.path
        path = settings.MEDIA_ROOT+'/'+image_address
        img = selectImage(path)
        segmented = segmentation(img)
        replaced = replace(img, segmented)
        extractFeatures(replaced)
        classif = createSVMClassifier(settings.BASE_DIR+'/main/datasets/input_features.csv', settings.BASE_DIR+'/main/datasets/benign_input_features.csv')
        result = classify(classif, "tumor_features.csv")

        return result   

相关问题 更多 >