2016-12-11 3 views
0

Es ist mein "erster Tag" bei diesem, also bitte mit mir ertragen.Ich versuche, render_template auf meiner Website zu arbeiten, Probleme zu haben

Ich versuche, render_template zu arbeiten, damit ich Python verwenden kann, um über HTML mit dem Programm Flask zu arbeiten. Ich habe die Tutorials durchgegangen, aber sie sagen mir nur, wie ich den Code über Terminal ausführen soll, und nur dann, indem ich Python explizit anrufe. Ich habe die drei Dateien (routes.py, layout und home) erstellt, die ich brauche, damit die Funktionalität funktioniert und sie in den Ordner (App-Ordner, Vorlagenordner in der App, Vorlagenordner in der App) verschoben wird. Ich habe dann den App-Ordner in der public_html-Datei auf meinem Server abgelegt.

Wenn ich auf die "mywebpage" /app/template/home.html Adresse gehe, bekomme ich die HTML-Datei wie ursprünglich geschrieben ohne die {{}} Variablen ersetzt. Völlig ratlos. Ich weiß nicht, ob ich die routes.py-Datei explizit explizit in einer HTML-Datei aufrufen muss, ob ich DirectoryIndex in .htaccess mitteilen muss, um danach zu suchen, oder ob der Server es im App-Ordner selbst finden soll. Aber im Grunde weiß ich, dass routes.py die anderen Dateien aufruft, aber ich weiß nicht, wie routes.py aufgerufen wird.

Hier ist mein Code:

routes.py

from flask import Flask, render_template 

app = Flask(__name__)  

@app.route('mywebsite') 
def home(): 
    user = {'nickname': 'Miguel'} # fake user 
    return render_template('home.html', user = user) 

'''if __name__ == '__main__':''' 
app.run(debug=True) 

home.html

{% extends "layout.html" %} 
{% block content %} 
    <div class="jumbo"> 
    <h2>Welcome to the Flask app<h2> 
    <h3>This is the home page for the Flask app<h3> 
    </div> 
    <body> 
     <p> Hello, {{user.nickname}} </p> 
    </body> 
{% endblock %} 

layout.html

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Flask App</title>  
    </head> 
    <body> 

    <header> 
     <div class="container"> 
     <h1 class="logo">Flask App</h1> 
     </div> 
    </header> 

    <div class="container"> 
     {% block content %} 
     {% endblock %} 
    </div> 

    </body> 
</html> 

Schließlich, sei nett. Ich habe alles getan, was mir einfällt, um an diesen Punkt zu kommen.

EDIT: Diese Webseite:

http://melvin0008.github.io/blog/build-a-redditapi-using-python/

sagt, dass @ app.route ('/ pants') sollte mywebsite.com/pants die gerenderte Vorlage machen anzuzeigen. Ich habe das mit meinem route.py-Dokument sowohl im root public_html-Ordner als auch im app-Ordner versucht. Keine funktionierte. website.com/pants wird von meinem Server nicht gesehen.

+0

Welche URL schreiben Sie in den Browser? –

+0

Es klingt, als würde man diese Dateien auf einem Server ablegen und erwarten, dass Apache sie nur bedient (ähnlich wie PHP funktioniert). So funktioniert Flask (oder Python im Allgemeinen) nicht. Sie müssen die Anwendung normalerweise über einen WSGI-Server ausführen. Im Fall von Apache ist mod_wsgi in der Regel das, was Sie suchen. Weitere Informationen finden Sie in den [Dokumentationen zur Verwendung von Flask] (http://flask.pocoo.org/docs/0.11/deploying/). – dirn

+0

dirn - Ja! Ich dachte, du solltest es wie eine html oder php Datei ausführen, wo du es einfach in den public_html Ordner speicherst und es ist gut zu gehen. Ich werde in die WSGI-Server-Sache schauen, aber wenn jemand andere "Idioten-Guides" hat, würde ich es gerne sehen. –

Antwort

0

Wenn Sie einen Flask-Server betreiben (in diesem Fall debuggen), sollten Sie die im Terminal geschriebene URL, wahrscheinlich localhost:8080, verwenden und die gewünschte Route anhängen.

Um die Webseite zu sehen, die Sie erstellt haben, sollten Sie in den Browser localhost:8080/mywebsite eingeben, wenn localhost:8080 Ihre Server-URL ist.

empfehle ich Ihnen den Routennamen zu / ändern, wie folgt aus: Statt: @app.route('mywebsite') : Schreibe: @app.route('/')

als Sie Ihre Homepage bei localhost:8080/

+0

Ich bin mir nicht sicher, dass das mein Problem löst. Ich möchte, dass dies auf meiner Website geschieht, damit es öffentlich zugänglich ist und nicht nur für mich auf dem lokalen Host sichtbar ist. Siehe auch meine letzte Änderung. –

+0

Dann sollten Sie den Server mit 'app.run (host = '0.0.0.0') ausführen, damit Ihr Server dem Netzwerk ausgesetzt wird. Denken Sie daran, das Debugging auszuschalten, wenn Sie in die Produktion gehen. Best Practices von Google für Flask-Produktion. Wenn Sie möchten, dass Ihre Website im Internet öffentlich ist, sollten Sie einen Hosting-Service erhalten. Laden Sie Ihre Bewerbung hoch und kaufen Sie einen Domain-Namen. –

+0

Ummm .... Ich habe einen Domain-Namen. Ich habe auch versucht, Host = 0.0.0.0 und gehe auf meine Website. Wo ist die modifizierte Vorlage (an welcher URL)? Du hast mein Problem nicht gelöst. –

0

Doron korrekt erhalten. Wenn Sie Ihre Anwendung ausführen, sollten Sie sagen, dass sie auf dem von Ihnen angegebenen Port ausgeführt wird. Sie können dann zu Ihrem lokalen Host gehen: xxxx/mywebsite und es anzeigen.

zum Beispiel diese Einrichtung wird das Hallo zurückgeben.HTML-Datei, wenn ich gehe zu localhost: 1200/hallo

@app.route("/hello") 
def hello(): 
    return render_template("hello.html") 

if __name__ == '__main__': 
    app.run(host="0.0.0.0", port=1200, debug=True) 

Soweit es ausgeführt wird, so dass andere Leute es sehen können Sie einen Server benötigt, wird eine dedizierte IP-Adresse und ein Apache-Server, so dass Sie die starten Anwendung, oder wenn Sie möchten, können Sie Heroku kostenlos verwenden.

+0

Ich glaube nicht, dass ich deine Antwort verstanden habe. Ich möchte nicht zu localhost gehen - ich möchte dies auf meiner Website angezeigt; Ich dachte, ich hätte das oben gesagt. Ich habe eine Website mit einer Host-Domain (also ich denke, ich habe einen Server - meinst du, ich brauche einen speziellen Server?) Ich denke, ich sollte die Anwendung von meinem Webhost starten können. Ist ein Apache-Server etwas Besonderes - ich dachte Apache war die Anwendung, die .htaccess und ähnliche Dateien lesen. Ich bin mir nicht sicher, ob Apache hier gelten soll. Im Grunde, von dem, was du geschrieben hast, glaube ich nicht, dass ich irgendetwas verstanden habe. Sorry:/ –

+0

Mach dir keine Sorgen, ich glaube, ich habe deine Frage missverstanden. Wenn Sie das Flaschenprogramm, das Sie auf dem Server geschrieben haben, auf dem Ihre Website läuft, ausführen, können Sie darauf zugreifen. Um es jedoch auf Port 80 (dem http-Port) laufen zu lassen, müssten Sie es über Apache oder einen anderen Server laufen lassen. Ich hoffe das hilft. –

0

Nachdem ich Ihre Antworten auf die anderen Antworten angeschaut habe, haben Sie ein grundsätzliches Missverständnis darüber, wie Flask-Projekte eingesetzt werden.

Im Gegensatz zu anderen Sprachen wie PHP oder einfach nur Standard-HTML, können Sie nicht einfach eine Python-Datei oder einen Pfad von Ihrem Browser aufrufen, Sie müssen die Server-Anwendung auf dem Remote-Server starten.

Wenn Sie Shared Webhosting verwenden, wird dies wahrscheinlich nicht möglich sein.

Normalerweise, wenn ich Flakon-Apps entwickle, starte ich eine EC2-Instanz in Amazon Web Services und stelle sie manuell bereit oder verwende den von ihr angebotenen Elastic Beanstalk-Service.

Sie können auch gemeinsam genutzte Webhosts finden, mit denen Sie Flasch-Apps bereitstellen können.

Verwandte Themen