Home > Enterprise >  Calling a function on HTML page, not found
Calling a function on HTML page, not found

Time:01-11

I am writing a tool to record and monitor downtime on a range of equipment.

I have my file structure as below: File Structure

Sites is just a subfolder containing individual HTMLS for where the equipment is located.

Currently, flask runs webapp.py which contains:

>from . import app
>#app = (__init__.app) 
>from . import views 
>from . import ReportingTool

views.py has all of my @app.route's in it, up until the [site].html files. From there, on the [site].html file I ask for input from the user. I haven't started writing code to record the user input in any meaningful way, just want to get the data to a python script and commit them to variables. To this end, in the html file I have

<body>
    <div >
        <form method="post" enctype="multipart\form-data" action="{{ url_for('downTime') }}">
            <fieldset >

This then requests different data from the user in the form of multiple field sets as seen here: fieldsets

as you see in the code snippet above I set the action to be url_for('downTime'), downTime is a function in my python file ReportingTool.py. this throws out an error, "werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'downTime'. Did you mean 'supportguide' instead?" traceback

Is there something I need to add or specify on the html document to enable this page (and the other [site].html pages to call functions from the ReportingTool.py file? the @app.route that calls the [site].html file is this and that is called with a redirected from here I've only got it setup like that becuase I wanted the name for the site to appear in the address bar.

Thanks in advance.

I am not sure on steps to fix as I am kind of throwing myself in the deep end to learn basic coding by creating an application for my workplace to replace an excel spreadsheet I created.

CodePudding user response:

You are not reaching the downTime function in the ReportingTool.py. I suggest trying add_url_rule in your views.py by adding the /reported endpoint referencing the downTime function in ReportingTool.py. Something like this;

app.add_url_rule('/reported', 'ReportingTool.downTime', view_func=ReportingTool.downTime, methods=METHODS)

This answer is based on the responds for this question. You a trying to reach a function in a different file from your main view file. Assuming you are calling the page with the form from a function in the views.py file.

CodePudding user response:

Solved with info from Kakedis' input, and the links they provided.

I added:

app.add_url_rule('/reported', 'ReportingTool.downTime', view_func=ReportingTool.downTime, methods=METHODS)

to webbapp.py, then:

@app.route('/reported')
def downTime():
    try:
        DTref = request.form['refDT']
    except:
        DTref = "No Reference"
    print(DTref)
    print("reported")
    return(render_template("/UserRip.html"))

to ReportingTool.py

This now prints the above to console to confirm it's pulling the correct func and brings the user back to the starting page.

  • Related