django 在每次运行时显示新生成的 html 文件

我有一个 python 脚本 (A.py),它接受用户通过表单输入并运行另一个 python 脚本 (B.py)。B.py 将 html 格式的结果存储到名为 yymmdd 的文件夹中。


B.py 生成的文件类似于“results_hhmmss.html”,因此每次执行 B.py 脚本时都会创建一个新的 html 文件。


根据我下面的 urls.py 代码,访问 127.0.0.1:8888 会将我带到 home_page。此外,一旦我使用主页中的按钮提交表单,脚本就会成功执行,并生成结果文件。


此外,如何呈现下一个网页以查看生成的 results_hhmmss.html 文件?我不确定如何构建 urlpatters,因为每次运行脚本时,结果文件都有一个新名称。


from django.contrib import admin

from django.urls import path

from . import views


urlpatterns = [

    path('admin/', admin.site.urls),

    path('', views.home_page),

    # what path or paths to add here ???

]

我还希望在地址栏中看到文件 results_hhmmss.html(位于文件夹 yymmdd 中)的相对路径,以便稍后可以直接重新访问同一链接。


提前感谢您花时间阅读这篇文章并愿意提供帮助。


我正在使用 python3 和 Django 版本 3.0.7


慕码人8056858
浏览 161回答 3
3回答

慕雪6442864

你可以这样做:view.pyfrom django.views.generic import TemplateViewclass PageView(TemplateView):&nbsp; &nbsp; def get_template_names(self):&nbsp; &nbsp; &nbsp; &nbsp; template_name = "path_to_template/{}.html".format(self.kwargs["page_name"])&nbsp; &nbsp; &nbsp; &nbsp; return [template_name]然后将更改添加到您的 urls.pyurlpatterns = [&nbsp; &nbsp; path('admin/', admin.site.urls),&nbsp; &nbsp; path('pages/<page_name>/', views.PageView.as_view()),&nbsp; &nbsp; path('', views.home_page),]

森林海

您可以有一个单独的模型来存储生成的 HTML 的路径,就像这样class HTMLGenerated(models.Model):&nbsp; &nbsp; name = models.CharField(max_length=100)&nbsp; &nbsp; path = models.CharField(max_length=500) # This will store the relative path然后您可以在 URL 模式中使用 URL 参数,如下所示:urlpatterns = [&nbsp; &nbsp; path('admin/', admin.site.urls),&nbsp; &nbsp; path('<int:html_id>/reports/', views.report_view)]相应的视图可以处理类似的东西:def report_view(request, html_id):&nbsp; &nbsp; object = get_object_or_404(HTMLGenerated, pk=html_id)&nbsp; &nbsp; # You can access the HTML by&nbsp; &nbsp; html = object.path&nbsp; &nbsp; # Return the context&nbsp; &nbsp; return render(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;request,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'some_template',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;context = {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'html': html&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}

30秒到达战场

从评论移动到这里进行代码格式化,请您进一步指导和纠正我。谢谢堆。这是更新的 urls.pyurlpatterns = [&nbsp; &nbsp; path('admin/', admin.site.urls),&nbsp; &nbsp; path('pages/<page_name>/', views.PageView.as_view()),&nbsp; &nbsp; path('', views.welcome_page, name='welcome_page'),&nbsp; &nbsp; path('results/', views.andreys_generate_results_file, name='andrey_script')]这是 views.py 代码class PageView(TemplateView):&nbsp; &nbsp; def get_template_names(self):&nbsp; &nbsp; &nbsp; &nbsp; template_name = "templates/{}.html".format(self.kwargs["page_name"])&nbsp; &nbsp; &nbsp; &nbsp; return [template_name]def andreys_generate_results_file(request):&nbsp; &nbsp; hhmmss = str(datetime.now().strftime("%H%M%S"))&nbsp; &nbsp; yyyymmdd = str(datetime.now().strftime("%Y%m%d"))&nbsp; &nbsp; # new_file_name = yyyymmdd + "/results_" + hhmmss + ".html"&nbsp; # actual line, commented for Andrey&nbsp; &nbsp; new_file_name = "templates/results_" + hhmmss + ".html"&nbsp; &nbsp; ls_cmd = "pwd; ls -lart | tee " + new_file_name&nbsp; &nbsp; output = subprocess.Popen(ls_cmd, shell=True, stdout=subprocess.PIPE)&nbsp; &nbsp; wait_for_sec = request.POST.get('seconds')&nbsp; &nbsp; time.sleep(int(wait_for_sec))&nbsp; &nbsp; return render(request, new_file_name)def welcome_page(request):&nbsp; &nbsp; # Purpose: Just display welcome_page.html&nbsp; &nbsp; return render(request, 'welcome/welcome_page.html')这是 welcome_page.html 表单代码的一部分:<p>New Form</p><hr><form action="{% url 'andrey_script' %}" method="post">{% csrf_token %}&nbsp; &nbsp; Text:&nbsp; &nbsp; <input type="text" name="seconds" required><br><br>&nbsp; &nbsp; <button type="submit" value="Run Python Script"> Click to Run Python Script</button></form>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python