簡體   English   中英

將.txt文件上傳到Django的textarea中?

[英]upload .txt file into textarea in django?

我是Django的新手。 我已經使用django表單小部件為網站制作了textareas。

我想添加一個文件上傳功能,以便能夠上傳將插入文本區域的.txt文件。 我該怎么辦?

我已經在https://docs.djangoproject.com/zh-CN/2.1/topics/http/file-uploads/中查看了文檔

如何在已編寫的代碼中合並此代碼?

forms.py

class HomeForm(forms.ModelForm):
    textInput = forms.CharField(required=True, widget=forms.Textarea(
        attrs={
            'class': 'form-control',
            'placeholder': 'Input text...',
            'id': 'input1'
        }
    ))

    class Meta:
        model = Post #import Post model from home models.py
        fields = {'textInput',} #comma required to ensure tuple capability

models.py

class Post(models.Model):
    post = models.CharField(max_length=1000)
    user = models.ForeignKey(User, on_delete=models.PROTECT) #default .CASCADE
    date = models.DateTimeField(auto_now=True) #data saved into db

views.py

class HomeView(TemplateView):
    template_name='home/home.html'

    def get(self, request):
        form = HomeForm

        posts = Post.objects.all()
        args = {'form': form, 'posts': posts}

        return render(request, self.template_name, args)


    def post(self, request):
        form = HomeForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False) #saves data (thanks to the model form)
            #comit is false as object still needs to be modified
            post.user = request.user
            post.save()
            text = form.cleaned_data['textInput'] #anticipates SQL injection
            #return redirect('home:home')

        args = {'form': form, 'text': text}
        return render(request, self.template_name, args)

首先,您應該附加forms.FileField以使用Django框架上傳機制。

處理請求時,任何Django表單都有其lifecycle 當用戶上傳.txt文件時,您可以在save方法中捕獲此文件,如下所示:

class HomeForm(forms.ModelForm):
    ...
    text_file = forms.FileField()
    ...

    def save(self, commit=True):
        ...
        # check if text_file contains content
        text_file_data = self.cleaned_data.get("text_file")
        ...
        if text_file_content:
            # self.instance is instance of "Post" model
            self.instance.post = text_file_content
        ...
        return super().save(commit)  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM