Saya ingin menulis bentuk tindakan untuk memanggil newpost fungsi dari viwes.py , newpost fungsi memiliki 2 argumen yaitu newpost(request,myid), tetapi ketika saya mencoba untuk menulis action="{%url 'newpost' %}" muncul error seperti ini :

TypeError at /newpost newpost() missing 1 required positional argument: 'myid'

Bagaimana saya bisa mengirim argumen ini dalam bentuk tindakan? tolong beritahu aku


def newpost (request,myid):
         blockedperson=[1]
         assert isinstance(request, HttpRequest)
   
         print("if1")
         print (request.POST.get('postcontent'))
         print (type(request.POST.get('postcontent')))
         while request.POST.get('postcontent'):
            print ("if2")
            if myid not in blockedperson :
                savepost=post()
                savepost.person_id= 437819147
                savepost.content=request.POST.get('postcontent')
                savepost.p_date=dt.datetime.now()
                savepost.save() 
            else :
                blocked="sorry, you are blocked, you can not share a post, for more information contact with IT on 437819147@kku.edu.sa"
                return render (request,'home.html',{'block':blocked})

         allpost=post.objects.all()
         allperson=person.objects.all()
         allstudent=student.objects.all()
         allteacher=teacher.objects.all()
         allcomp=company_rep.objects.all()

         return render (request,'home.html',{'posts':allpost , 'person':allperson,'student':allstudent,'teacher':allteacher,'comp':allcomp,'id':myid})
       
<form name="postbox" action="{%url 'newpost' %}" method="POST" align="center">
        {% csrf_token %}
        <label>shear your ideas, information, and experience...</label>
        <br />
        <textarea id="post" name="postcontent" rows="4" cols="50">

 </textarea>
        <br />
        <input  style="width: 31%;" type="submit" value="post"  name="postsubmit">
        
    </form>

Ini juga file url saya, haruskah saya mengubahnya jika saya menambahkan argumen?

urlpatterns = [
   
     path('' , app.views.login),
     path('newpost' , app.views.newpost,name='newpost'),
     path('signup' , app.views.signup,name='signup'),
     path('signupteacher' , app.views.signupteacher,name='signupteacher'),
     path('signupstudent' , app.views.signupstudent,name='signupstudent'),
     path('signupcompany' , app.views.signupcompany,name='signupcompany')
   
]
0
hejazi 3 April 2021, 11:53

2 jawaban

Jawaban Terbaik

Seperti yang ditemukan di sini:

Django : Tindakan bentuk HTML mengarahkan untuk melihat (atau url?) dengan 2 argumen

Dalam html Anda:

<form name="postbox" action="{%url 'newpost' %}" method="POST" align="center">
        {% csrf_token %}
        <label>shear your ideas, information, and experience...</label>
        <br />
        <textarea id="post" name="postcontent" rows="4" cols="50">

 </textarea>
        <br />
        <input  style="width: 31%;" type="submit" value="post"  name="postsubmit">
        
    </form>

Anda ingin mengubah atribut tindakan dari formulir menjadi: {%url 'newpost' myid %}

<form name="postbox" action="{%url 'newpost' myid %}" method="POST" align="center">
        {% csrf_token %}
        <label>shear your ideas, information, and experience...</label>
        <br />
        <textarea id="post" name="postcontent" rows="4" cols="50">

 </textarea>
        <br />
        <input  style="width: 31%;" type="submit" value="post"  name="postsubmit">
        
    </form>
0
Kwsswart 3 April 2021, 09:19

Kirim myid beraksi juga saat Anda mengirimnya pada fungsi

Seperti ini "{%url 'newpost' myid %}"

Kode Anda akan terlihat seperti:

<form name="postbox" action="{%url 'newpost' myid %}" method="POST" align="center">

Lihat Sekarang, buat template polls/results.html: dari django doc

3
Keval 3 April 2021, 09:24