from django.shortcuts import render, get_object_or_404
from django.views import generic
from bs4 import BeautifulSoup
import requests
from .models import Article
class IndexView(generic.ListView):
template_name = 'index.html'
context_object_name = 'latest_article_list'
def get_queryset(self):
"""Return the last five published articles."""
return Article.objects.order_by('-pub_date')[:5]
def detail(request, article_id):
article = get_object_or_404(Article, pk=article_id)
html = Article.article_url
read = requests.get(html)
soup = BeautifulSoup(read.content)
links = soup.find_all("a")
return render(request, 'detail.html', {'article': article, 'links':link})
/ let
代替const
进行维护? (这来自Airbnb Style Guide)答案 0 :(得分:7)
答案 1 :(得分:3)
块范围有时与功能范围相同吗?我知道函数范围适用于函数内部的所有内容,但是不能得到块范围的确切内容。
块范围是块的所有内容,例如:
function foo() {
// function scope
if (condition) {
// block scope
}
}
通过第5版规范,JavaScript没有块范围。下一个规范(ECMAScript 6,又名“ES6”)即将完成,通过let
和const
添加了块范围。
对于Javascript,目前是否建议使用
let
/const
代替var以备将来维护?
这纯粹取决于你。 let
和const
是您可以添加到腰带的新工具。如果您不希望他们替换var
,他们 来替换let
。也就是说,您经常听到“var
是新的let
”。
使用var
声明的变量具有块范围,使用let
声明的变量不具有块范围。
请注意const
和var
don't have great support in the wild yet。毫不奇怪,将块范围添加到以前从未有过的引擎可能是非平凡的。您可以使用像Babel这样的转发器,或者暂时继续使用FlowDocument
。
答案 2 :(得分:2)
我不确定你是否真的已经回答了你的问题:
块范围有时与功能范围相同吗?我知道函数范围适用于函数内部的所有内容,但不能得到什么 完全是块范围。
是,块范围有时与功能范围相同。块范围是一组括号{ a block scope here }
内的所有内容。因此,在函数代码的顶部,块作用域将与函数作用域相同:
function test(x) {
// this is both a block scope and a function scope
let y = 5;
if (x) {
// this is a smaller block scope that is not the same as the function scope
let z = 1;
}
}
对于Javascript,目前建议使用let / const代替 var用于将来的维护? (这来自Airbnb风格指南)
let
和const
是最新ES6规范的一部分,仅在最新的Javascript引擎中实现,有时在最新的引擎中,它们仅使用特殊标志启用。他们来到所有较新的JS引擎/浏览器,但尚未广泛部署。因此,如果您正在为广泛的互联网上的常规浏览器消费编写Javascript,则无法可靠地使用let
和const
。
在某些情况下,您现在可以安全地使用let
和const
进行编程:
如果您只定位特定的Javascript引擎,并且您知道它支持这些功能(例如特定版本的nodejs或仅针对特定浏览器的特定版本的插件)。< / p>
如果您使用的是将代码转换为将在所有浏览器中运行的代码的转换程序。使用转换器时,您可以使用最新功能编写代码,并且转换器将“愚弄”#34;这样,通过使用较新功能的模拟,您的代码将在旧版浏览器中运行。
如果您正在为您知道支持let
和const
的环境进行编程,那么建议您根据需要使用它们。如果您在函数顶部声明了一个变量,那么let
和var
将执行相同的操作。
如果在函数中的较小范围内声明变量,则let
将包含在较小的范围内,但var
将被提升到函数的顶部并具有函数范围,无论在何处宣布。
您链接的AirBnb Style Guide是专为ES6环境编写的(请注意,其样式指南的ES5版本有单独的链接)。所以,这意味着他们正在假设一个支持ES6的环境。这可能是因为他们的目标是服务器端的JS引擎,他们知道这些引擎支持ES6,或者因为他们使用的转换器将ES6代码转换为可在ES5引擎上运行的内容。
关于转换器的说明。在使用转换器并将所有变量声明切换到块作用域内的let
之前,有必要了解转换器生成什么类型的代码以及是否需要额外的代码它生成对您的应用程序的性能有任何影响。例如,通过创建内联IIFE来模拟let
的块作用域,这可能导致包含let
语句的每个块的额外运行时开销。我并不是说这不一定会让你无法使用转换器,但在决定是否使用转换器时,我建议你彻底熟悉转换后的代码是什么样的。各种ES6功能,让您知道它是否适合您拥有的任何工作或仅适用于某些工作。