it-swarm.com.de

Anwendung nimmt keine .css-Datei auf (Flasche/Python)

Ich rendere eine Vorlage, die ich mit einem externen Stylesheet formatieren möchte. Die Dateistruktur ist wie folgt.

/app
    - app_runner.py
    /services
        - app.py 
    /templates
        - mainpage.html
    /styles
        - mainpage.css

mainpage.html sieht so aus

<html>
    <head>
        <link rel= "stylesheet" type= "text/css" href= "../styles/mainpage.css">
    </head>
    <body>
        <!-- content --> 

Keiner meiner Stile wird jedoch angewendet. Hat es etwas damit zu tun, dass das HTML eine Vorlage ist, die ich rendere? Der Python sieht so aus.

return render_template("mainpage.html", variables..)

Ich weiß, dass viel funktioniert, weil ich die Vorlage immer noch rendern kann. Als ich jedoch versuchte, meinen Styling-Code aus einem "style" -Block innerhalb des "head" -Tags der HTML-Datei in eine externe Datei zu verschieben, verschwand alles Styling und hinterließ eine leere HTML-Seite. Hat jemand einen Fehler in meiner Dateistruktur?

58
Zack

Sie müssen einen 'statischen' Ordner einrichten (für css/js-Dateien), sofern Sie ihn nicht ausdrücklich während der Initialisierung von Flask überschreiben. Ich gehe davon aus, dass Sie es nicht überschrieben haben. 

Ihre Verzeichnisstruktur für css sollte folgendermaßen aussehen:

/app
    - app_runner.py
    /services
        - app.py 
    /templates
        - mainpage.html
    /static
        /styles
            - mainpage.css

Beachten Sie, dass sich das Verzeichnis/styles unter/static befinden sollte

Dann mach das

<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='styles/mainpage.css') }}">

Flask sucht nun nach der css-Datei unter static/styles/mainpage.css

129
codegeek

Verwenden Sie in jinja2-Vorlagen (die Flasche verwendet)

href="{{ url_for('static', filename='mainpage.css')}}"

Die static-Dateien befinden sich normalerweise im Ordner static, sofern nicht anders konfiguriert.

12
njzk2

Ich habe mehrere Threads gelesen und keiner von ihnen hat das Problem behoben, das die Leute beschreiben, und ich habe es auch erlebt.

Ich habe sogar versucht, mich von conda zu entfernen und pip zu verwenden, um auf Python 3.7 zu aktualisieren. Ich habe alle vorgeschlagenen Codierungen ausprobiert und keine davon wurde behoben.

Und hier ist der Grund (das Problem):

standardmäßig durchsuchen Python/Flask das Static und die Vorlage in einer Ordnerstruktur wie folgt:

/Users/username/folder_one/folder_two/ProjectName/src/app_name/<static>
 and 
/Users/username/folder_one/folder_two/ProjectName/src/app_name/<template>

sie können sich mit dem Debugger von Pycharm (oder einem anderen Programm) selbst verifizieren, die Werte in der App überprüfen (app = Flask ( name )) und nach teamplate_folder und static_folder suchen

um dies zu beheben, müssen Sie die Werte beim Erstellen der App wie folgt angeben:

TEMPLATE_DIR = os.path.abspath('../templates')
STATIC_DIR = os.path.abspath('../static')

# app = Flask(__name__) # to make the app run without any
app = Flask(__name__, template_folder=TEMPLATE_DIR, static_folder=STATIC_DIR)

der Pfad TEMPLATE_DIR und STATIC_DIR hängen davon ab, wo sich die Datei-App befindet. In meinem Fall, siehe das Bild, befand es sich in einem Ordner unter src.

sie können die Vorlage und die statischen Ordner nach Belieben ändern und sich in der App registrieren = Flask ...

In Wahrheit habe ich angefangen, das Problem beim Herumspielen mit dem Ordner zu erleben, und manchmal hat es manchmal nicht funktioniert. Dies behebt das Problem ein für alle Mal

der HTML-Code sieht folgendermaßen aus:

<link href="{{ url_for('static', filename='libraries/css/bootstrap.css') }}" rel="stylesheet" type="text/css" >

Das ist der Code

Hier die Struktur der Ordner

0
Stefano Tuveri

Ich lasse gerade Version 1.0.2 von flask laufen .. Die oben genannten Dateistrukturen funktionierten nicht für mich, aber ich habe eine gefunden, die dies tat, und zwar wie folgt:

anwendungsordner / flask_app.py statisch/ style.css Vorlagen / index.html

(Bitte beachten Sie, dass 'static' und 'templates' Ordner sind, die genau den gleichen Namen haben sollten.)

Um zu überprüfen, welche Version der Flasche Sie ausführen, öffnen Sie Python im Terminal und geben Sie Folgendes ein:

>> import flask
>> flask.__version__
0
Ly-Bach