Search code examples
pythondjangodjango-templatesdjango-querysetdjango-urls

Django-Pass data from html to python and wise versa


Index.html

<html>
<head>
<title>my</title>
</head>
<body>
<form class="grid" method="POST" action="{% url 'result' %}">
   {% csrf_token %}
   <textarea name="name" /></textarea>
   <button type="submit"">Detect</button>
</form>
<label>{{ result }}</label>
<body>
</html>

view.py

def test_data_preprocessing(test_data1):
    test_data1 = test_data1.lower()
    test_data1 = re.compile(
        r"(http|https|ftp|ssh)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?"
    ).sub("", test_data1)
    test_data1 = re.compile(r"<.*?>").sub("", test_data1)  # remove tags
    test_data1 = TextBlob(test_data1).correct()  # Speeling correction
    test_data1 = "".join(
        filter(lambda x: not x.isdigit(), test_data1)
    )  # remove numbers
    test_data1 = contractions.fix(test_data1)  # contraction
    test_data1 = remove_stop(test_data1)  # stop word removal
    test_data1 = re.compile(r"[^\w\s]").sub(
        "", test_data1
    )  # '[^\w\s]',''   this convert all puntuations, underscores, alphabets to null(not of word characters and space)
    test_data1 = word_tokenize(test_data1)  # Tokenization
    test_data1 = [
        lemmatizer.lemmatize(w, get_wordnet_pos(w)) for w in test_data1
    ]  # Lemmatization
    return test_data1
def result(request):
    namee = request.POST['name']
    namee =  test_data_preprocessing(namee)
    return render(
    request,
        "index.html",
        {"name":namee}
    )

urls.py

from django.urls import path
from mywebsite import views
urlpatterns = [
    path("", views.homePage, name='result'),
    path("", views.result),
]

I'm making a website using Django where I have to get data from html page in python file and after getting data I have to perform some preprocessing on data. and after that again return back to the same page with some new information when i press a button. The problem is that when I press button than I move to the same page, but the new information is not displaying after clicking on a button. Is there any way to move information in the same page?


Solution

  • The problem is with action attribute of HTML if you see it correctly, there should be "" in action, currently they are missing so it should be:

    action="{% url 'result' %}"
    

    Not:

    action={% url 'result' %}
    

    Note: You can also simply remove the action attribute as Django by default takes current page route.

    Secondly, your view name is result in views.py and you define it as homePage in urls.py, kindly see it.

    Also the view should pass some context dict so:

    def result(request):
        name = request.POST['name']
        actual_name=preprocessing(name)
        return render(
        request,
            "index.html",
            {"name":actual_name}
        )
    

    Edit:

    Try this urls.py:

    from django.urls import path
    from mywebsite import views
    urlpatterns = [
        path("", views.homePage, name='home-page'),
        path("result/", views.result, name="result"),
    ]
    

    Try this result view:

    def result(request):
        if request.method=="POST":
            namee = request.POST['name']
            namee2 =  test_data_preprocessing(namee)
            return render(
                request,
                "index.html",
               {"name":namee2}
            )
         return render(
                request,
                "index.html"
         )
    

    Try this template:

    <form class="grid" method="POST" action="{% url 'result' %}">
       {% csrf_token %}
       <textarea name="name" /></textarea>
       <button type="submit"">Detect</button>
    </form>
    
    {% if name %}
        <label>{{ name }}</label>
    {% else %}
        <p> name is not coming as it is GET request.</p>